S4E20 艾宾浩斯错觉
以下那个橘色的圆圈比较大?
实际上这两个圆一样大!左边的圆因为周围的圆圈比较小,看起来就比较大,而右边圆的因为周围的比较大,看起来就小一些。或许这类比到生活中,就可解释为你的表现取决于周围人的水平。

而这个错觉有个名字就是艾宾浩斯错觉。这是心理学家艾宾浩斯(1850-1909)提出的。补充一下,艾宾浩斯他还有个知名理论就是艾宾浩斯的记忆曲线理论,他用实验来论证适当的复习会对记忆的维持有显著的影响(这个不用说大家也知道哦)。
这节的 Geogebra 任务就是要来实作出这样的效果。并且最后用小圆的平移来感受两个圆一样大的效果。
你将学会
使用 sequence 来绘制多个圆
利用向量与滑动条来实现平移
利用旋转来改变圆的位置
问题分析与步骤拆解
鼓励大家先看效果图自行动手作看看、想看看。若无法完成再观看视频解说。

问:这图的结构是什么?
答:两个位在中心大小相等的圆。另外有 8个小圆、与 6 个大圆在左右两侧。因此,先建立两个滑动条来控制圆的大小。
新增两个参数来控制左侧与右侧的圆的大小
rl = 0.5 #左圆的大小
rr = 2 #右圆的大小
问:这两个圆的位置该如何设定呢?
答:利用一个参数 d 来表示两圆的距离。左圆的圆心在 (-d,0),右圆的圆心 OR 在 (d,0)。
指定圆心位置 OL, OR , 用 circle 来画两个半径为 1 的圆。
d = 8
OL = (-d,0)
OR = (d,0)
CL = Circle(OL,1)
CR = Circle(OR,1)

问:外围的圆该如何设置呢?
答:可以先设置外围的第一个圆的位置。接着使用[序列] Sequence、与[旋转] Rotate 来绘制其他的圆。
左侧外围的圆
CL0 = Circle(OL+(1+1.5*rl, 0) , rl)
CLs = Sequence(Rotate(CL0, pi/4*k, OL),k,1,8)
右侧外围的圆
CR0 = Circle(OL+(1+1.5*rr, 0) , rr)
CRs = Sequence(Rotate(CR0, pi/3*k, OL),k,1,6)
问:为何 CL0 的位置为 OL + (1+1.5*rl,0)
答:为了让内外两侧的圆有一些距离,而其距离该被外侧圆的大小所影响。因此,设定为为 1+1.5*rl ,表示这两个圆中间还有 0.5*rl 的空隙。

问:如何制作平移的动圆?
答:利用向量来控制移动距离?而要有动态的效果需要时间滑动条 t。
新增滑动条 t = 0.5
利用 t*vector(OL,OR) 来实现动态变化的移动量
t = 0.5
Cs = translate(CL,t*vector(OL,OR))
总结
这是个看现象作问题拆解的基本训练。除了指令的使用外,重点仍在于去分析图形,思考摆放位置、想清楚哪些是可控可变的参数。而对于多个类似的结构更要善用 Sequence 来发挥编程大量运算的特性。
另外,除了用小圆的平移外展示内圆相等,也可用以下变化来实现两个外围的圆圈大小变化。对于以下动图,需要去修改原本 rl=0.5, rr= 2 的设置,你可想想如何才能让这两个圆的半径会随着 t 而变呢?

参考资料
【Bili 】https://www.bilibili.com/video/av40021910?p=6
【GGB1】 https://www.geogebra.org/m/vct3zcsu
【GGB2】https://www.geogebra.org/m/urdhx6e2
【错觉介绍】http://www.360doc.com/content/16/0518/07/65339_560052267.shtml