S4E23 勾股定理欧氏证明:单滑杆控制多次变形
在这节引用的例子是知名的勾股定理的动态证明,但这次的教学重点在于利用单个滑动条来呈现多次复合的移动操作,最主要的思维就是多层 If 的使用。

你将学会
使用滑动条,搭配旋转与平移的指令
利用 If 来实现单一滑动条控制多次移动
学习指引
这节课定位为中阶课程,以指令输入为主。若是新手可以先完成如下的基础课程:


操作步骤
1. 绘制直角三角形
问:几何原本证明勾股定理的图形结构是什么?
答:由一个直角三角形,从三边长出三个正方形。

问:如何绘制出一个直角三角形?
答:可用直径所对的圆周角是直角来绘制。另个方法是用三边长满足勾股定理关系来绘制。在这课件为了以两股长 a,b 为参数,先建滑动条 a,b 。再利用 c^2=a^2+b^2 的关系来确定这个直角三角形 。
# 建立滑动条 a,b
a = 3
b = 4
# 让 c 与 a,b 可构成直角三角形
c = (a^2+b^2)^0.5
问:如何利用这 3 个参数来确定三个点的位置。
答:以 c 为斜边的边长并将 AB 两点水平摆置 。而 C 点的位置,利用的就是 SSS 构造全等,分别用 A, B 为圆心,绘制两圆,取其交点的方式来得到 C 的位置。
# 利用 a,b,c 来建立三个点
A = (0,0)
B = A + (c,0)
# 思考:为何要写 B = A+(c,0) 而不写 B= (c,0)
C = Intersect(Circle(A,b),Circle(B,a),1)
# intersect( 物件1, 物件2, 次序 k ) :取得两个物件的第 k 个交点
# 可对每个点的 [标题] 设置 $%n$ 来让标签以斜体显示
问:如何连接这三点构成直角三角形呢?
答:可以用 [线段] Segment 来完成,也可用 [多边形] Polygon 来标好三条边。而对于直角,可以用 [角] Angle 来标角。
# 建立三个边与标注直角
plABC = Polygon(A,B,C)
aACB = angle(A,C,B)
2. 长出三个正方形
完成直角三角形后,接着从这三边各长出一个正方形。并从 C 点来作正方形的垂线。

问:如何绘制正方形?是否要先找出四个顶点的位置。
答:仍可用 [多边形] Polygon 工具来达成。 当多边形工具的第 3 个参数为一个整数 n 时,就会以这两点为边绘制出一个正 n 边形。注意:其方向为逆时针方向来呈现。
plAB = Polygon(B,A,4)
plAC = Polygon(A,C,4)
plCB = Polygon(C,B,4)
问:如何做垂线找出垂足?
答:可以利用 [垂线] 工具,在利用 [交点] 工具取得垂足。在这介绍另个指令 [最近点] ClosestPoint ,来取得垂足的点。
C_1 = ClosestPoint(line(A,B),C)
C_2 = ClosestPoint(line(A,B),C)
SCC_2 = Segment(C,C_2)
3. 用滑动条控制图形的平推
在这小节主要使用滑动杆来控制图形的平推,平移的主要概念就是向量。

问:如何让图形可变动?
答:图形的变化决定于点的变化。因此,先决定点是如何移动的。
在此,利用向量的参数式,搭配滑动条参数参数 t ,来控制点的变化。例如:Ct = C+ t*(B-C) 标示由 C 往 CB 方向移动。完成 Ct,Ft, Gt 的设定后,可用[多边形] 来连接四个点。
# 由参数控制平推
t = Slide(0,1,0.1)
Ct = C + t(B-C)
Ft = F + t(B-C)
Gt = G + t(G-G)
plACFGt = Polygon(A,Ct,Ft,Gt)
4. 用单一滑动条控制图形多次的移动
下图让图形分三个阶段进行先平推、再旋转、再平推。其思维与分段函数类似。在实践这个的方法主要使用 If 这指令。

问:如何让图形平移后再转动?
答:利用 If 来区分成两个阶段。 以 Ct 为例,前半段 0<t< 1 时,平移 C+t(B-C)。后半段 1<t<2 时,旋转 Rotate(B, (t-1)*(-pi/2), A)。要特别主要就是旋转角的部分是(t-1)*(-pi/2) ,而不是 t*(-pi/2) 。
此外,对 Ft 来说,平移后的位置,并非原本图形上的点。这时在将这个中间点重新命名为 F1,方便作第二次的转动。
# 二阶段移动:平推再旋转
Ct = If(t<=1, C+t(B-C), If(t<=2,Rotate(B, (t-1)(-pi/2), A),D))
F1 = F + (B-C)
Ft = If(t<=1, F+t(B-C), If(t<=2,Rotate(F1, (t-1)(-pi/2), A),C_2))
Gt = If(t<=1, G+t(G-G), If(t<=2,Rotate(G, (t-1)(-pi/2), A),C_1))
问:如何让图形平移后再转动接着在平移?
答:这时就用三层的 If,而第三层操作的时间参数就要使用 (t-2) 来控制。
# 左侧三阶段移动:平推旋转再平推
Ct = If(t<=1, C+t(B-C), If(t<=2,Rotate(B, (t-1)(-pi/2), A),D))
F1 = F + (B-C)
F2 = Rotate(F1, -pi/2,A)
Ft = If(t<=1, F+t(B-C), If(t<=2,Rotate(F1, (t-1)(-pi/2), A),If(t<=3,F2+(t-2)*(C_2-F2),C_2)))
Gt = If(t<=1, G+t(G-G), If(t<=2,Rotate(G, (t-1)(-pi/2), A),If(t<=3,C+(t-2)*(C_1-C),C_1)))
# 三阶段移动:平推旋转再平推

问:对于右侧的移动,时间要如何设置呢?
答:若要让左右两侧比较一致,可以让右侧使用参数 s。而其中 s 定为 t-3 。
但为了让 t 值不为负数,则利用 If(t<3,0,t-3) 来达成此效果。
# 右侧三阶段移动:平推旋转再平推
s = If(t<3,0,t-3)
Cs = If(s<=1, C+s(A-C), If(s<=2,Rotate(A, (s-1)(pi/2), B),E))
I1 = I + (A-C)
I2 = Rotate(I1, pi/2,A)
Is = If(s<=1, F+s(A-C), If(s<=2,Rotate(I1, (s-1)(-pi/2), B),If(s<=3,I2+(s-2)*(C_2-I2),C_2)))
Hs = If(s<=1, H+s(H-H), If(s<=2,Rotate(H, (s-1)(-pi/2), B),If(s<=3,C+(s-2)*(C_1-C),C_1)))
小结
复合指令的使用场合很多,搭配 If 的控制可让几何变换有更多的形式。很多面积的等积变换的问题都很适合用这方法来实现。
相关连接
【Bili 】 https://www.bilibili.com/video/av87418730/
【GGB】https://www.geogebra.org/classic/frxv8dhn