<font color=#008000>
>作者: 吳姿瑩
>更新:2022.10.28
</font>[color=#008000]
# Lesson07: 追趕問題
###### tags: `運動科學模擬` `多元選修` `vpython` `追趕問題`
## :memo:設置兩個物體sphere
<iframe width="560" height="315" src="https://www.youtube.com/embed/GOmFGdu4J5I" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
根據前一堂課的概念,請先設置兩個==不同顏色==的物體sphere,並可同時==畫出x-t圖==(使用搭配顏色顯示)。
### 1.參數設定
- 地板長:10.2 公尺
- 質點半徑:0.1 公尺
- v~1~=0.5 公尺/秒
- v~2~=0.4 公尺/秒
### 2.畫面設定
- 前一堂課有關畫布canvas的設定,請設定title="1D Motion", caption='追趕運動'的畫布
- 設定sphere基本設定為
```javascript!
ball = sphere(pos=vector(1,2,1), radius=0.5)
```
pos為球中心的位置,radius為半徑大小,另外注意==兩球的位置不要重疊==,可利用前後位置來觀察兩球的運動。
- 隨時間推移,需畫x-t圖
### 3.物體的運動
- v~1~的球至地板右端時,即可停下
:::spoiler 學生作業
1. Homework:兩個sphere球體等速度運動
Requirements要求:
(1)需畫出球體移動
(2)需畫出球體x-t圖
(3)需在idle中顯現出停下時間
2. 請將==程式code以及瀏覽器結果截圖、IDLE所需時間螢幕截圖== 至google classroom繳交作業。
3. 完成今日協作平台更新
4. 將code上傳至雲端硬碟中(Lesson07 vpython追趕問題)
:::
:::spoiler **追趕問題兩球設置 完整程式碼**
```javascript!=1
"""
Auther :吳姿瑩
Date :2022/08/17
version :python3.10.6 vpython7
chapter :追趕問題
"""
from vpython import *
"""
1. 參數設定, 設定變數及初始值
"""
L = 10.2 # 地板長度
R = 0.1 # 質點半徑
v1 = 0.5 # 質點1速度
v2 = 0.4 # 質點2速度
t = 0 # 時間
dt = 0.01 # 時間間隔
"""
2. 畫面設定
"""
scene = canvas(title="1D Motion", width=640, height=400, x=0, y=0, center=vec(0, 0.3, 0), background=vec(204/255,204/255,255/255))
floor = box(pos=vec(0, 0, 0), size=vec(L, -0.01, 0.5*L), color=color.green)
ball1=sphere(pos=vector(-L*0.5+R, R, 0), radius=R, v1=vec(v1,0,0), color=color.red, size_units="world")
ball2=sphere(pos=vector(-L*0.5+R, R, 0.1), radius=R, v1=vec(v2,0,0), color=color.blue, size_units="world")
#畫x-t圖設定畫布
gd = graph(title="x-t plot", width=600, height=450,xmax=35, x=0, y=600, xtitle="t(s)", ytitle="x(m)")
#label 為圖示說明
xt = gcurve(graph=gd, color=color.red, label="red point")
xt2 = gcurve(graph=gd, color=color.blue, label="blue point")
"""
3. 物體運動部分, 木塊到達地板邊緣時停止執行
"""
while(ball1.pos.x <= 0.5*L-R):
rate(1000)
ball1.pos.x += v1*dt #x=x0+v*dt
ball2.pos.x += v2*dt
xt.plot(pos = (t, ball1.pos.x))
xt2.plot(pos = (t, ball2.pos.x))
t += dt
print("停下時間為", t)
```
:::
## :memo:兩球體運動為等速運動、等加速度運動
<iframe width="560" height="315" src="https://www.youtube.com/embed/3i4f48_JD4k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
### 1.參數設定
因為追趕問題兩球不知何時會相遇,故在畫布設置會較廣,球的大小比例也會較大一些,故以下參數設定為
- 地板長 : 300
- 質點半徑 : 5
- v~1~ : 20
- v~2~ : 0
- a~2~ : 5
- 兩質點相距 dx : 20
### 2.畫面設定
- 前一堂課有關畫布canvas的設定,請設定title="1D Motion", caption='追趕運動'的畫布
- 隨時間推移,需畫x-t圖
### 3.物體的運動
- 當位置相同時候則停下程式,而因為要觀察兩顆球,故放置時並未重疊,故觀察==x方向位置==重疊時即可停下。
- 使用while迴圈時,為了使迴圈可以運作且順利停下,設定了當兩球距離小於10^-4^公尺時,則可以停下迴圈。
```javascript=
dx=ball1.pos.x - ball2.pos.x
while(float(dx) > 0.0001):
rate(1000)
ball1.pos.x += v1*dt #x=x0+v*dt
ball2.pos.x = -L*0.5 + v2*t + 0.5*a2*t*t #dx=v0t+0.5at^2
dx=ball1.pos.x - ball2.pos.x
xt.plot(pos = (t, ball1.pos.x))
xt2.plot(pos = (t, ball2.pos.x))
t += dt
```
:::spoiler 學生作業
1. Homework:兩個sphere球體等速度、等加速度運動
Requirements要求:
(1)需畫出球體移動
(2)需畫出球體x-t圖、v-t圖
(3)需在idle中顯現出相遇時間
2. 請將==程式code以及瀏覽器結果截圖、IDLE所需時間螢幕截圖== 至google classroom繳交作業。
3. 完成今日協作平台更新
4. 將code上傳至雲端硬碟中(Lesson07 vpython追趕問題)
:::
:::spoiler **追趕問題兩球(等速度運動、加速度運動)設置 完整程式碼**
```javascript!=1
"""
Auther :吳姿瑩
Date :2022/08/17
version :python3.10.6 vpython7(相遇時間,v-t圖)
chapter :追趕問題(加速度)
"""
from vpython import *
"""
1. 參數設定, 設定變數及初始值
"""
L = 300 # 地板長度
R = 5 # 質點半徑
v1 = 20 # 質點1速度
v2 = 0 # 質點2速度
a2 = 5 # 質點2加速度
dx = 20 # 兩質點相距距離
t = 0 # 時間
dt = 0.01 # 時間間隔
"""
2. 畫面設定
"""
scene = canvas(title="1D Motion", width=800, height=600, x=0, y=0, center=vec(0, 2, 0), background=vec(204/255,204/255,255/255))
floor = box(pos=vec(0, 0, 0), size=vec(L, -0.01, 0.5*L), color=color.green)
ball1=sphere(pos=vector(-L*0.5 + R + dx, R, 0), radius=R, v1=vec(v1,0,0), color=color.red, size_units="world")
ball2=sphere(pos=vector(-L*0.5 + R, R, 0.1), radius=R, v2=vec(v2,0,0), color=color.blue, size_units="world")
#畫x-t圖設定畫布
gd = graph(title="x-t plot", width=600, height=450, x=0, y=600, xtitle="t(s)", ytitle="x(m)")
gd2 = graph(title="v-t plot", width=600, height=450, x=0, y=1050, xtitle="t(s)", ytitle="v(m/s)")
xt = gcurve(graph=gd, color=color.red)
xt2 = gcurve(graph=gd, color=color.blue)
vt = gcurve(graph=gd2, color=color.red)
vt2 = gcurve(graph=gd2, color=color.blue)
"""
3. 物體運動部分, 木塊到達地板邊緣時停止執行
"""
dx=ball1.pos.x - ball2.pos.x
while(float(dx) > 0.0001):
rate(1000)
ball1.pos.x += v1*dt # x=x0+v*dt
ball2.pos.x = -L*0.5 + v2*t + 0.5*a2*t*t # dx=v0t+0.5at^2
ball2.v2.x = a2*t
dx=ball1.pos.x - ball2.pos.x
xt.plot(pos = (t, ball1.pos.x))
xt2.plot(pos = (t, ball2.pos.x))
vt.plot(pos = (t, ball1.v1.x))
vt2.plot(pos = (t, ball2.v2.x))
t += dt
print("相遇時間為 :", t)
```
:::
## :memo:相遇問題真實題目案例
:::success
一步行者以6公尺/秒之速率沿直線公路追趕一輛公車,當他距離該公車25公尺處時公車以1公尺/秒^2^之加速度駛去,則:(應選三項)
(A)此人無法追及此車
(B)當車出發後6秒後,人與車距離最短
(C )人與車最短距離為7公尺
(D)人與車最短距離為18公尺
(E)人與車最近時,車速為6公尺/秒。
:::
:::spoiler 學生作業
1. Homework:畫出真實題目案例圖
<iframe width="560" height="315" src="https://www.youtube.com/embed/miErPoJjWzQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Requirements要求:
(1)需畫出球體移動
(2)需畫出球體x-t圖、v-t圖
(3)需在idle中顯現出相遇時間/最短距離時間
2. 請將==程式code以及瀏覽器結果截圖、IDLE所需時間螢幕截圖== 至google classroom繳交作業。
3. 完成今日協作平台更新
4. 將code上傳至雲端硬碟中(Lesson07 vpython追趕問題)
:::
## :memo:參考網址
1. vpython sphere設置 :https://www.glowscript.org/docs/VPythonDocs/sphere.html
2. vpython graph設置 :https://www.glowscript.org/docs/VPythonDocs/graph.html