<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