<font color=#008000> >作者: 吳姿瑩 >更新:2022.11.03 </font>[color=#008000] # Lesson08: 自由落體運動 ###### tags: `運動科學模擬` `多元選修` `vpython` `自由落體運動` ## :memo:自由落體物理觀念 - 自由落體運動為一維運動,只受萬有引力作用在鉛直方向運動,根據 $\vec{F}=m\vec{a}=m\vec{g}$,$y$方向作等加速度運動,故可得 (1). $\vec{v} = \vec{v_0} + \vec{a}t$ (2). $\overrightarrow{\Delta{x}}=\vec{v_0}t+\frac{1}{2}\vec{a}t^2$ (3). $v^2=v_0^2+2\vec{a}\cdot\vec{\Delta{x}}$ 其中在地表重力加速度$g=9.8 m/s^2$ - 根據國中理化所學物體運動,具有動能$E_k=\frac{1}{2}mv^2$,可知當自由落下時速度會愈來愈快,動能$E_k$愈來愈大 ## :memo:設置一個物體sphere自由落下 <iframe width="560" height="315" src="https://www.youtube.com/embed/lClo_D3dyt8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ### 1.參數設定 |**意涵** |**設定**| |-----|--------| |圓球質量 1kg|m = 1 | |圓球半徑 1m |R = 1 | |圓球初始高度 20 m|H = 20| |圓球初速度(靜止落下)|v = 0| |圓球加速度|g = 9.8| |初始時間|t = 0| |時間間隔|dt = 0.01| |地板厚度| thin = 0.01| ### 2.畫面設定 - 前一堂課有關畫布canvas的設定,請設定title="1D Motion", caption='自由落下'的畫布 - 利用box設定一個地板 - 設定一球sphere,位置==從地板高度H==自由落下(==注意球的半徑、地板厚度==),初速度為$\vec{v}=(0, 0, 0)$,加速度為$\vec{a}=(0, -g, 0)$ ```javascript=1 ball = sphere(pos=vec(0, H + R + thin*0.5, 0), radius=R, color=color.red, v=vec(0, 0, 0), a=vec(0, -g, 0)) ``` - 需畫出五個圖(1)y-t圖 (2)v~y~-t圖 (3)a~y~-t圖 (4)E~k~-t圖 (5)E~k~-h圖,gd需開設5個畫布(==注意畫布的大小以及y位置==),圖的名稱可定義為gd、gd_vel、gd_a、gd_ener、gd_ener_h ```javascript=1 yt = gcurve(graph=gd, color=color.red) vt = gcurve(graph=gd_vel, color=color.red) at = gcurve(graph=gd_a, color=color.red) Et = gcurve(graph=gd_ener, color=color.red) Ety = gcurve(graph=gd_ener_h, color=color.red) ``` ### 3.物體的運動 - 當球的位置觸及地板時(==注意球的半徑、地板的厚度==),則結束while迴圈 ``` while(ball.pos.y - floor.pos.y >= R + thin*0.5): ``` - 每一時刻更新球的位置、速度、動能 (1)位置根據初位置、位移大小$\overrightarrow{\Delta{x}}=\vec{v_0}t+\frac{1}{2}\vec{a}t^2$,其中v~0~初速度為0,更新每一時刻的位置 ``` ball.pos.y = H + R + thin/2 + (v*t + 0.5*ball.a.y*t**2) ``` (2)根據等加速度運動,每一時刻速度大小為$\vec{v} = \vec{v_0} + \vec{a}t$,其中v~0~初速度為0 ``` ball.v.y = v + ball.a.y*t ``` 以下為更新物體運動的完整程式碼 ```javascript=1 while(ball.pos.y - floor.pos.y >= R + thin*0.5): rate(1000) ball.v.y = v + ball.a.y*t ball.pos.y = H + R + thin/2 + (v*t + 0.5*ball.a.y*t**2) ball_ener = 0.5*m*ball.v.y**2 yt.plot(pos = (t, ball.pos.y)) vt.plot(pos = (t, ball.v.y)) at.plot(pos = (t, ball.a.y)) Et.plot(pos = (t, ball_ener)) Ety.plot(pos = (ball.pos.y, ball_ener)) t += dt ``` - 請求出(print)球落下所需的時間 :::spoiler **自由落下 完整程式碼** ```javascript=1 "" Auther :吳姿瑩 Date :2022/08/18 version :python3.10.6 vpython7 chapter :自由落下 """ from vpython import * """ 1. 參數設定, 設定變數及初始值 """ m = 1 # 圓球質量 1kg R = 1 # 圓球半徑 H = 20 # 圓球初始高度 20 m v = 0 # 圓球初速度(靜止落下) g = 9.8 # 圓球加速度 t = 0 # 時間 dt = 0.01 # 時間間隔 thin = 0.01 # 地板厚度 """ 2. 畫面設定 """ #畫面設定,預設為 640 and 400 像素 scene = canvas(title="1D Motion", caption='自由落下', 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(20, thin, 10), color=color.green) ball = sphere(pos=vec(0, H+R+thin/2, 0), radius=R, color=color.red, v=vec(0, 0, 0), a=vec(0, -g, 0)) #畫y-t圖v-t圖設定畫布 gd = graph(title="y-t plot", width=600, height=450, x=0, y=640, xtitle="t(s)", ytitle="y(m)") gd_vel = graph(title="<b>v<sub>y</sub>-t plot<b>", width=600, height=450, x=0, y=1050, xtitle="t(s)", ytitle="v<sub>y</sub>(m/s)") gd_a = graph(title="<b>a<sub>y</sub>-t plot<b>", width=600, height=450, ymax=0, x=0, y=1500, xtitle="t(s)", ytitle="a<sub>y</sub>(m/s<sup>2</sup>)") gd_ener = graph(title="<b>E<sub>k</sub>-t plot<b>", width=600, height=450, x=0, y=1950, xtitle="t(s)", ytitle="E<sub>k</sub>(J)") gd_ener_h = graph(title="<b>E<sub>k</sub>-h plot<b>", width=600, height=450, x=0, y=2400, xtitle="h(m)", ytitle="E<sub>k</sub>(J)") yt = gcurve(graph=gd, color=color.red) vt = gcurve(graph=gd_vel, color=color.red) at = gcurve(graph=gd_a, color=color.red) Et = gcurve(graph=gd_ener, color=color.red) Ety = gcurve(graph=gd_ener_h, color=color.red) """ 3. 物體運動部分, 圓球到達地板邊緣時停止執行 """ while(ball.pos.y - floor.pos.y >= R + thin*0.5): rate(1000) ball.v.y = v + ball.a.y*t ball.pos.y = H + R + thin/2 + (v*t + 0.5*ball.a.y*t**2) ball_ener = 0.5*m*ball.v.y**2 yt.plot(pos = (t, ball.pos.y)) vt.plot(pos = (t, ball.v.y)) at.plot(pos = (t, ball.a.y)) Et.plot(pos = (t, ball_ener)) Ety.plot(pos = (ball.pos.y, ball_ener)) t += dt print("所需時間為t = ", t) ``` ::: :::spoiler 學生作業 1. Homework:畫出三個不同顏色的球,分別為自由落體、鉛直下拋、鉛直上拋 <iframe width="560" height="315" src="https://www.youtube.com/embed/GgBybby9pQc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> |球資訊 |設定| |----|------| |球1質量 |m~1~ = 1 公斤| |球2質量 |m~2~ = 1公斤| |球3質量 |m~3~ = 1公斤| |球1初速度 |v~1~ = 0 m/s| |球2初速度 |v~1~ = +10 m/s(向上拋出)| |球3初速度 |v~1~ = -10 m/s(向下拋出)| Requirements要求: (1)需畫出球體移動 (2)需畫出三個球體搭配球體顏色(1)y-t圖 (2)v~y~-t圖 (3)a~y~-t圖 (4)E~k~-t圖 (5)E~k~-h圖 (3)需在idle中顯現出各自落地所需時間t~1~、t~2~、t~3~ 2. 請將==程式code以及瀏覽器結果截圖、IDLE所需時間螢幕截圖== 至google classroom繳交作業。 3. 完成今日協作平台更新 4. 將code上傳至雲端硬碟中(Lesson08 vpython自由落下) :::