自由落體
-
我們可以用第二堂課學到的知識,來撰寫一個物體從高處落下的等速自由落體運動物理現象模擬程式。
- 物理觀念
速度 = 速度 + 加速度 * 時間
程式碼:
Web VPython 3.2 # 匯入視覺化套件 from vpython import * # 1. 參數設定 # 加速度 a = -9.8 #加速度值,在 x、z 方向為 0,在 y 方向為 g=-9.8 公尺/秒^2 #速度 vy = 0 #球的 y 方向速度(公尺/秒),初始值為0 #高度 h = 10.0 #球的初始高度,單位為公尺 #時間間隔 dt = 0.001 #畫面更新的時間間隔,單位為秒 #經過時間 t = 0 #模擬所經過的時間 ,單位為秒,初始值為0 # 2. 畫面設定 # 畫布 scene = canvas(center=vector(0, h/2, 0), background=vector(0.5,0.6, 0)) # 參考地板 floor = box(pos=vector(0,0,0), length=15, height=0.005, width=5) # 球 ball = sphere(pos=vector(0, h, 0), radius=0.2, color=color.blue) # 3. 描述物體的運動 while ball.pos.y > ball.radius: rate(1000) # 速度 = 速度 + 加速度 * 時間間隔 vy = vy + a * dt # 位置 = 位置 + 速度 * 時間間隔 ball.pos.y = ball.pos.y + vy * dt
執行結果,如下:
– 插入一段影片
- 觸地反彈
程式碼:
Web VPython 3.2 # 匯入視覺化套件 from vpython import * # 1. 參數設定 # 加速度 a = -9.8 #加速度值,在 x、z 方向為 0,在 y 方向為 g=-9.8 m/s^2 # 速度 vy = 0 #球的 y 方向速度(公尺/秒),初始值為0 # 高度 h = 10.0 #球的初始高度,單位為公尺 # 時間間隔 dt = 0.001 #畫面更新的時間間隔,單位為秒 # 經過時間 t = 0 #模擬所經過的時間 ,單位為秒,初始值為0 # 2. 畫面設定 # 畫布 scene = canvas(center=vector(0, h/2, 0), background=vector(0.5,0.6, 0)) # 參考地板 floor = box(pos=vector(0,0,0), length=15, height=0.005, width=5) # 球 ball = sphere(pos=vector(0, h, 0), radius=0.2, color=color.blue) # 3. 描述物體的運動 while True: rate(1000) # 速度 = 速度 + 加速度 * 時間間隔 vy = vy + a * dt # 位置 = 位置 + 速度 * 時間間隔 ball.pos.y = ball.pos.y + vy * dt if ball.pos.y < 0.2: vy = -vy
執行結果,如下:
– 插入一段影片
- 觸地反彈(摸擬能量耗損)
程式碼:
Web VPython 3.2 # 匯入視覺化套件 from vpython import * # 1. 參數設定 # 加速度 a = -9.8 #加速度值,在 x、z 方向為 0,在 y 方向為 g=-9.8 m/s^2 # 速度 vy = 0 #球的 y 方向速度(公尺/秒),初始值為0 # 高度 h = 10.0 #球的初始高度,單位為公尺 # 時間間隔 dt = 0.001 #畫面更新的時間間隔,單位為秒 #經過時間 t = 0 #模擬所經過的時間 ,單位為秒,初始值為0 # 2. 畫面設定 # 畫布 scene = canvas(center=vector(0, h/2, 0), background=vector(0.5,0.6, 0)) # 參考地板 floor = box(pos=vector(0,0,0), length=15, height=0.005, width=5) # 球 ball = sphere(pos=vector(0, h, 0), radius=0.2, color=color.blue) # 3. 描述物體的運動 while True: rate(1000) # 速度 = 速度 + 加速度 * 時間間隔 vy = vy + a * dt # 位置 = 位置 + 速度 * 時間間隔 ball.pos.y = ball.pos.y + vy * dt if ball.pos.y < ball.radius and vy < 0: vy = -vy*0.9
執行結果,如下:
– 插入一段影片
- 課堂作業
修改模擬程式,計算自1 0公尺高球自由落下觸地反彈直到第6次碰到地面所花的時間。
提示:觸地反彈,第三次碰到地面後停止動畫
程式碼:
Web VPython 3.2 # 匯入視覺化套件 from vpython import * # 1. 參數設定 # 加速度 a = -9.8 #加速度值,在 x、z 方向為 0,在 y 方向為 g=-9.8 m/s^2 # 速度 vy = 0 #球的 y 方向速度(公尺/秒),初始值為0 # 高度 h = 10.0 #球的初始高度,單位為公尺 # 時間間隔 dt = 0.001 #畫面更新的時間間隔,單位為秒 # 經過時間 t = 0 #模擬所經過的時間 ,單位為秒,初始值為0 # 2. 畫面設定 # 畫布 scene = canvas(center=vector(0, h/2, 0), background=vector(0.5,0.6, 0)) # 參考地板 floor = box(pos=vector(0,0,0), length=15, height=0.005, width=5) # 球 ball = sphere(pos=vector(0, h, 0), radius=0.2, color=color.blue) # 次數 number = 0 # 3. 描述物體的運動 while number < 3: rate(1000) # 速度 = 速度 + 加速度 * 時間間隔 vy = vy + a * dt # 位置 = 位置 + 速度 * 時間間隔 ball.pos.y = ball.pos.y + vy * dt if ball.pos.y < 0.2: vy = -vy number = number + 1
執行結果,如下:
– 插入一段影片