S5R1 圆内的迭代反射
从圆内发射一个入射角为 10 度的光线,经过几次后会反射为原出发点呢?如何用GGB来实践问题呢?在这个案例要带大家体验的就是问题拆解的方法。

若是第三季就加入学用数学的老用户,就知道这是第三季的初始任务。而这也是第五季的第三系列复习课程编号将从 S5R1-S5R4。有兴趣想回顾前三季课程的可以从以下链接来回顾。
第一季:https://shimo.im/docs/Gdtg13sn1vQmEsAQ
第二季基础课:https://shimo.im/docs/g3xwJMFi8ZABFglM
第二季专题课:https://shimo.im/docs/nj6m3jQgJ6MJSibp
第三季:https://docs.qq.com/doc/DSWl6UlFzc2h6SXhM
你将学会
本节最主要的是问题拆解方法,关于用到的核心指令如下:
迭代列表 IterationList
序列 Sequence
对称 Reflect
先备课程
若你对 Sequence 不熟悉,推荐可看以下视频

若你对 IterationList 还不熟悉,推荐可看以下视频

问题拆解
2 入射角与点位置的关系

问:这个图形的变数是什么?常数是什么?
答:变数为入射角的角度 inDeg。固定的为起始点 P0。
# 建立初始圆
O = (0,0)
Circle(O,1)
P0 = (1,0)
# 建立滑动条
inDeg = Slider(0,30,1)

问:入射角为 15 度时,第一个点 P1 的位置在哪?
答:利用圆心角与圆周角的关系,可得到 P1 的极坐标角度为 180-15x2 。
# 表示入射角与点
inAngle = inDeg/180*pi
P1 = (1;pi - 2*inAngle)
# 表示向量、边与角
v1 = Vector(P0,P1)
Segment(O,P1)
Angle(O,P1,P0)
3 利用反射产生点

问:如何描述反射后点P2的位置?
答:利用对称,P2 为 P0 对直线 OP1 的对称点。
# 第一个反射点
P2 = Reflect(P0, Line(O,P1))
v2 = Vector(P1,P2)
# 下一个反射点
P3 = Reflect(P1, Line(O,P2)
)
v3 = Vector(P2,P3)
4 迭代列表

问:如何快速建立多个反射点?
答:利用 IterationList 反复操作。迭代的方式为 P_2 = Reflect( P_0, line(O,P_1)) 。在下式的迭代列表指令中,表示 a=P0, P2=P1,迭代的结果为 Reflect(a,line(O,b)) , 共迭代 n 次。
问:IterationList 的结构为何?
答:IterationList(迭代指令, 迭代变数,{变数初始值},迭代次数)
n = Slider(1,30,1)
Ps = IterationList(Reflect(a,line(O,b)),a,b,{P0,P1},n)
5 用序列产生边列

问:如何建立多边连线 Vector(Ps(0),Ps(1)), Vector(Ps(1),Ps(2)) ?
答:用序列 Sequence 达成连线、将点列Ps的参数设定为 k ,k+1 ,并将 k 设定范围从 1 到 k。
Vs = Sequence(Vector(Ps(k),Ps(k+1)),k,1,n)
6 数学分析

问:如何分析入射角为 10 度的反弹次数?
答:先观察 P0, P1 在圆周上的位置。可看到其圆心角度为 160 度。而 P1, P2 的夹角也是如此。经过 n 次反射后,相当于角度转了 160*k 次。而当回到原点时,表示 160*n = 360k。因此,可得到 n 为 9。其计算方式就是 360 除以 160 与 360 的最大公因数。
问: 每次点的角度偏移 180-2*inDeg 。是否 Ps 可用 Sequence 来达成呢?
答:对于 Ps 可用 Sequence( (1; k*(180-2*inDeg)),k,1,n) 来达成。
总结回顾
这节最想与大家分享的是我在做这题的思路分析。我当初看到这题时,我是如何将他转为 GGB 交互课件的。通过分析反射行为后,其实发觉关键就是一句迭代就可讲清楚。通过这次操作我也是体会到数学迭代在使用上的方便之处。
对于初学者而言,我希望可以体会到这题用到 Sequence 与 IterationList 的差异。这其实对应到数学的通项公式与递回关系式。同时鼓励去参考毕氏螺线的这个课件。这课件也是体现 Sequence 与 IterationList 的差异。

参考连接
【GGB】https://www.geogebra.org/m/es8wvyty
【Bili】https://www.bilibili.com/video/av62752325
【YouTube】https://www.youtube.com/playlist?list=PLXH05kw-i_5LEZl7HqzbktGT037kh2tbL