S4E13 是圆还是方?
今天要介绍的这个是 2016 错觉艺术大奖的得奖作品 Ambiguous Cylinder Illusion 。

图片来源于网络
这样的错觉是如何产生的呢?我们看一下实际上它是什么样子的。

图片来源于网络
其实,它就是利用了不同角度观察的错觉。那么我们也可以使用GGB来作出这样的视觉效果。首先来观察一下效果图吧~

在效果图中,你看到了几个图形,它们之间有什么位置上的关系吗?答案见①
那你可以想到怎么实现这个效果吗?肯定要有一个圆形和一个方形,并且它们所在的平面互相垂直,其次就是把它们叠加起来。
你可以先动手试试看,卡住了再来看讲解吧!
你将要收获
1. 在三维空间绘制平面图形
2. 叠加两个空间图形
1 绘制空间中的圆
A. 绘制xoy平面内的圆
首先,我们可以利用之前学的知识,绘制一个在xoy平面内的圆。请查阅S4E12的教程,S4E12 画出任何你想要的数学图象,快来一起学习吧~效果图如下:

B. 将圆变换一个平面
我们建立两个向量来表示新的平面。
先找到空间中的两个点,C=(1,0,1),Y=(0,1,0)
向量的指令为:
Vector(起点,终点)【若起点省略不写,默认为原点】
即向量为OC=((0,0,0),C),OY=((0,0,0),Y)
如何书写新的平面内的圆呢?效果图如下,答案见②

我们看到这时候不是一个圆,你可以怎么修正呢?答案见③
2 绘制空间中的正方形
A.同上,绘制xoy平面内的正方形
a. xoy平面内,绘制直线。

b. 第四象限,折回来。

c. 变成和圆一样的纵坐标,即(1-|sin(t)|,sin(t),0,t,sT,eT)

d. 画出关于y轴对应的部分
横坐标乘以sgn(Pi/2-t)【sgn 可以根据括号里面的正负来输出+1或者是-1;比如,括号内的数大于零,则输出+1;反之,输出-1】

B. 将正方形变换到和圆垂直的一个平面
方形的横坐标为Sx(t)=sgn((π)/(2)-t) (1- abs(sin(t)))
纵坐标为Sy(t)=sin(t)
与OC垂直的向量为(-1,0,1)
你可以写出新的平面内的正方形的指令吗?答案见④,效果如下:

3 合并空间中的圆和正方形
最后我们把两个图形的方程式加起来,即可得合并后的图象。
cM=Curve(cos(t)*C+sin(t)*Y+Sx(t)*S,t,sT,eT)

想一想,为什么会出现这样结果呢?
如果把圆和正方形分别画在xoy平面和xoz平面内,会有同样的效果嘛?你觉得能够决定最后两个图形能够叠加的关键因素是什么?
4 学以致用
接下来,你可以把正方形和心形也画在这样的平面内,从而产生错觉。画心形,可以参考上节课的教程:S4E12 画出任何你想要的数学图象,快来一起学习吧~期待你的结果~~

答案区
① 方形和圆形是在两个相互垂直的平面内,当我们垂直于一个方向去看的时候,看到圆形,则方形变为一条线段;反之,圆形变为一条线段,可以看到一个方形。
② cC2=Curve(cos(t)*C+sin(t)*Y,t,sT,eT)
③因为OC和OY的单位长度不一样,我们只需要把Y改为(0,1.414,0)即可。
④ cS2=Curve(Sx*S+Sy*Y,t,sT,eT)

参考资料
【Bili】https://www.bilibili.com/video/av77773250?p=3
【GGB】https://www.geogebra.org/classic/dgakmyrw