# GeoGebra 教學 13:移動軌跡(擺線、圓的漸開線、內旋輪線)
> 作者:王一哲
> 日期:2020/10/29
本次課程檔案已上傳至 GeoGebraTube,可以線上操作或下載檔案。
1. 擺線 https://ggbm.at/kzpn3t84
2. 圓的漸開線 https://ggbm.at/yeynmwq4
3. 內旋輪線 https://ggbm.at/gtfpszmn
4. 內旋輪線圖西對 (Tusi couple) https://ggbm.at/mqsrhqeg
## 擺線
### 原理
假設有一個半徑為 $r$ 的小球在水平地面上純滾動,球心O點向右前進的速度為 $v$,小球繞O點順時鐘方向轉動的角速度為 $\omega$,由於小球與地面接觸點沒有相對滑動,因此
$$
v = r \omega
$$
則圓周上的某個點P移動的軌跡為**擺線** (cycloid),若用參數式可以表示為
$$
x = r (t - \sin t) ~~~~~ y = r (1 - \cos t)
$$
以下是使用 GeoGebra 繪製擺線的方法及成果。
<img height="100%" width="100%" src="https://upload.cc/i1/2020/10/29/vfN7g2.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的擺線動畫</div>
<br />
### 繪圖步驟
1. 輸入指令設定半徑r、速度v、角速度ω、週期T。
```latex
r = 1
v = 1
ω = v/r
T = 2*π/ω
```
2. 輸入指令設定控制時間 time 的數值拉桿,再開啟屬性選單,將動畫設定為**遞增(一次)**。
```latex
time = Slider(0, 3*T, 0.01*T)
```
3. 輸入指令圓心位置x坐標值 $x_O$。
```latex
x_O = v*times
```
4. 輸入指令畫出圓心O點以及半徑為r的圓形c。
```latex
O = Point({x_O, r})
c = Circle(O, r)
```
<img height="40%" width="40%" src="https://upload.cc/i1/2020/10/29/Mbwx5G.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟1 ~ 4</div>
<br />
5. 使用點工具於圓形c上新增點A,再將點A拉到圓形c的正下方。
6. 輸入指令畫出繞著O點順時鐘方向旋轉的P點,再隱藏點A。
```latex
P = Rotate(A, (-ω*time/π*180)°, O)
```
<img height="40%" width="40%" src="https://upload.cc/i1/2020/10/29/0pLyif.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟5、6</div>
<br />
7. 於P點上按滑鼠右鍵選取**顯示移動軌跡**或使用以下指令設定。
```latex
SetTrace(P, True)
```
<img height="30%" width="30%" src="https://upload.cc/i1/2020/10/29/hzLW9o.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟7</div>
<br />
8. 輸入指令用參數式畫出擺線。
```latex
a = Curve(r*(t - sin(t), r*(1- cos(t))), t, 0, 6*π)
```
<img height="100%" width="100%" src="https://upload.cc/i1/2020/10/29/IWTMQp.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟8</div>
<br />
9. 於數值滑桿 time 上按滑鼠右鍵選取**開始動畫**,點P的移動軌跡與使用參數式繪製的擺線會重疊。
<img height="100%" width="100%" src="https://upload.cc/i1/2020/10/29/O4Pmc2.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟9</div>
<br />
10. 若要清除移動軌跡,可以從選單點選**檢視** ⇒ **清除所有痕跡** 或按快速鍵 **Ctrl + F**。
<img height="30%" width="30%" src="https://upload.cc/i1/2020/10/29/8r57JR.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟10</div>
<br />
<img height="100%" width="100%" src="https://upload.cc/i1/2020/10/29/vfN7g2.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的擺線動畫</div>
<br />
---
## 圓的漸開線
### 原理
漸開線的英文為 involute 或 evolute。假設B為圓周上的點,B點繞圓心O旋轉的弧長為L,在過B點的切線上有一個P點,BP的距離等於 L,則P點的軌跡為圓的漸開線,圓的漸開線常用來作為齒輪邊緣的形狀。若使用參數式則為
$$
x = a (\cos t + t \sin t)
$$
$$
y = a (\sin t - t \cos t)
$$
以下是使用 GeoGebra 繪製圓的漸開線成果。
<img height="80%" width="80%" src="https://i.imgur.com/61hw3Zu.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製圓的漸開線動畫</div>
<br />
### 繪圖步驟
1. 輸入指令設定半徑r、角速度ω、週期T。
```latex
r = 1
ω = 1
T = 2*π/ω
```
2. 輸入指令設定控制時間 t 的數值拉桿,再開啟屬性選單,將動畫設定為**遞增(一次)**。
```latex
t = Slider(0, 2*T, 0.01*T)
```
3. 輸入指令畫出圓心O點以及半徑為r的圓形c。
```latex
O = Point({0, 0})
c = Circle(O, r)
```
<img height="40%" width="40%" src="https://i.imgur.com/9IQCx8P.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟1 ~ 3</div>
<br />
4. 使用點工具於圓形c上新增點A,再將點A拉到圓形c的左方。
5. 輸入指令畫出繞著O點順時鐘方向旋轉的B點,再隱藏點A。
```latex
B = Rotate(A, -ω t, O)
```
<img height="40%" width="40%" src="https://i.imgur.com/B7NARqX.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟4、5</div>
<br />
6. 輸入指令計算B點繞著O點旋轉的弧長 arclen。
```latex
arclen = r*ω*t
```
7. 輸入指令新增射線OB並命名為f。
```latex
f = Ray(O, B)
```
8. 輸入指令新增通過B點的切線g。
```latex
g = Tangent(B, c)
```
9. 使用點工具於切線g上、B點的下方新增C點。
<img height="40%" width="40%" src="https://i.imgur.com/g0gpNS9.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟6 ~ 9</div>
<br />
10. 輸入指令新增通過B、C點的向量u,計算向量u的單位向量direct。
```latex
u = Vector(B, C)
direct = u / Length(u)
```
11. 輸入指令將B向沿著向量direct的方向平移距離arclen,平移後的點命名為P。
```latex
P = Translate(B, direct*arclen)
```
12. 顯示移動P點的移動軌跡。
```latex
SetTrace(P, True)
```
13. 輸入指令通過B、P點的射線h。
```latex
h = Ray(B, C)
```
<img height="60%" width="60%" src="https://i.imgur.com/Bco693s.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步10 ~ 13</div>
<br />
14. 輸入指令用參數式畫出圓的漸開線,由於t已經被用來表示時間,故參數式中改用t1。
```latex
theory = Curve((-r*(cos(t1) + t1*sin(t1)), r*(sin(t1) - t1*cos(t1))), t1, 0, 4*π)
```
<img height="80%" width="80%" src="https://i.imgur.com/61hw3Zu.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製圓的漸開線動畫</div>
<br />
---
## 內旋輪線
### 原理
小時候有一種玩具,將一個小的圓板放在一個大的圓內側,接著用原子筆插在小圓板的某個洞中,用力地將小圓板貼著大圓內側轉動就可以畫出很複雜的圖案,這個玩具的名稱是**萬花尺** (spirograph)。
<img height="80%" width="80%" src="https://upload.wikimedia.org/wikipedia/commons/thumb/2/24/Spirograph.jpg/1024px-Spirograph.jpg" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">萬花尺(圖片來源:https://upload.wikimedia.org/wikipedia/commons/2/24/Spirograph.jpg)</div>
<br />
萬花尺應用到的數學原理名為**內旋輪線** (hypotrochoid),以下是它的參數式。
$$
x(\theta) = (R-r) \cos \theta + d \cos \left( \frac{R-r}{r} \theta \right)
$$
$$
y(\theta) = (R-r) \sin \theta - d \sin \left( \frac{R-r}{r} \theta \right)
$$
<br />
以下是從維基百科上找到的例子,我們接下來試著用 GeoGebra 畫出同樣的圖。
<img height="50%" width="50%" src="https://upload.wikimedia.org/wikipedia/commons/f/fa/HypotrochoidOutThreeFifths.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">內旋輪線動畫,R = 5,r = 3,d = 5(圖片來源:https://upload.wikimedia.org/wikipedia/commons/f/fa/HypotrochoidOutThreeFifths.gif)</div>
<br />
<img height="50%" width="50%" src="https://upload.wikimedia.org/wikipedia/commons/5/5c/Ellipse_as_hypotrochoid.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">內旋輪線動畫,R = 10,r = 5,d = 1,圖西對 (Tusi couple)(圖片來源:https://upload.wikimedia.org/wikipedia/commons/5/5c/Ellipse_as_hypotrochoid.gif)</div>
<br />
### 繪圖步驟
1. 使用以下指令新增大圓圓心 O<sub>1</sub>、小圓半徑 r<sub>2</sub>、角速度 ω 、週期 T。
```latex
O_1 = Point({0, 0})
r_2 = 3
ω = 0.1
T = 2 * π /ω
```
<br />
2. 使用以下指令新增控制大圓半徑 r<sub>1</sub> 與小圓半徑 r<sub>2</sub> 比值的數值滑桿 ration,如果為了畫出 r<sub>1</sub> : r<sub>2</sub> = 5 : 3 的圖形,可以在數值滑桿上連點滑鼠左鍵兩下,手動輸入量值 5/3。
```latex
ratio = Slider(1.1, 3, 0.1)
```
<br />
3. 使用以下指令新增大圓半徑 r<sub>1</sub>、小圓圓心 O<sub>3</sub>。
```latex
r_1 = ratio * r_2
O_3 = Point({r_1 - r_2, 0})
```
<br />
4. 使用以下指令新增時間的數值滑桿 t,為了使動畫執行時比較流暢,可以適當地調整動畫速度。由於 r<sub>1</sub> : r<sub>2</sub> = 5 : 3 、 d = 5 的圖形小圓需要轉動3次才能畫完,要將 t 的最大值設為 3T;如果是 r<sub>1</sub> : r<sub>2</sub> = 2 : 1、d = 1 的圖形小圓只需要轉動1次就能畫完,可以將 t 的最大值設為 T 即可。
```latex
t = Slider(0, 3*T, T/200)
```
<br />
5. 使用以下指令新增旋轉後的小圓圓心 O<sub>2</sub>。
```latex
O_2 = Rotate(O_3, ω*t, O_1)
```
<br />
6. 使用以下指令新增大圓、小圓。
```latex
c = Circle(O_1, r_1)
d = Circle(O_2, r_2)
```
<br />
<img height="60%" width="60%" src="https://i.imgur.com/iIVdzRK.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟1 - 6</div>
<br />
7. 使用以下指令於小圓上新增點A以及繞圓心 O<sub>2</sub> 旋轉的點B。
```latex
A = Point(d)
B = Rotate(A, -ω (r_1 - r_2) / r_2 * t, O_2)
```
<br />
8. 使用以下指令新增通過點B、O<sub>2</sub> 的射線,再於射線上新增要繪製軌跡的點 P。
```latex
f = Ray(B, O_2)
P = Point(f)
SetTrace(P, True)
```
<br />
<img height="60%" width="60%" src="https://i.imgur.com/e90sv4c.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">繪圖步驟7 - 8</div>
<br />
9. 隱藏不需要用到的物件,於數值滑桿 t 上點擊滑鼠右鍵再點選**開始動畫**,就可以看到以下的動畫。
<img height="60%" width="60%" src="https://i.imgur.com/Mb3RtqK.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的內旋輪線動畫,R = 5,r = 3,d = 5</div>
<br />
<img height="60%" width="60%" src="https://i.imgur.com/NYeGpkE.gif" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的內旋輪線動畫,R = 10,r = 5,d = 1,圖西對 (Tusi couple)</div>
<br />
10. 如果想要加上理論曲線,兩種圖形對應的指令如下。
```latex
theory = Curve((r_1 - r_2) cos(θ) + 5*cos((r_1 - r_2) / r_2 θ), (r_1 - r_2) sin(θ) - 5*sin((r_1 - r_2) / r_2 θ), θ, 0, 6*π)
theory = Curve((r_1 - r_2) cos(θ) + cos((r_1 - r_2) / r_2 θ), (r_1 - r_2) sin(θ) - sin((r_1 - r_2) / r_2 θ), θ, 0, 2*π)
```
<br />
<img height="60%" width="60%" src="https://i.imgur.com/eQnyh4k.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的內旋輪線,R = 5,r = 3,d = 5</div>
<br />
<img height="60%" width="60%" src="https://i.imgur.com/oWqckau.png" style="display: block; margin-left: auto; margin-right: auto;"/>
<div style="text-align:center">使用 GeoGebra 繪製的內旋輪線,R = 10,r = 5,d = 1,圖西對 (Tusi couple)</div>
<br />
---
## 參考資料
1. 國立台中教育大學科學教育與應用學系科學遊戲實驗室。千變萬花尺。2021年8月9日,取自 http://scigame.ntcu.edu.tw/paper/paper-025.html
2. 維基百科。萬花尺。2021年8月9日,取自 https://en.wikipedia.org/wiki/Spirograph
3. 維基百科。內旋輪線。2021年8月9日,取自 https://en.wikipedia.org/wiki/Hypotrochoid
<br />
---
## 相關指令的官方說明書
1. 數值滑桿 https://wiki.geogebra.org/en/Slider_Command
2. 點 https://wiki.geogebra.org/en/Point
3. 圓 https://wiki.geogebra.org/en/Circle_Command
4. 旋轉 https://wiki.geogebra.org/en/Rotate_Command
5. 射線 https://wiki.geogebra.org/en/Ray_Command
6. 切線 https://wiki.geogebra.org/en/Tangent_Command
7. 向量 https://wiki.geogebra.org/en/Vector
8. 設定軌跡 https://wiki.geogebra.org/en/SetTrace_Command
9. 曲線 https://wiki.geogebra.org/en/Curve_Command
<br />
---
###### tags:`GeoGebra`