虎克定律
-
在上一個課程「等速率圓周運動」的案例中,我們使用的範例是讓「圓球」在「圓桌」上繞著「圓心」進行「等速率運動」,這個課程換成是用 Python 程式來模擬「木塊」與「彈簧」之間存在的物理現象:「虎克定律」。
虎克定律
定義:在彈性限度內,彈簧伸長量與其所受外力成正比。
公式:外力 = 彈力係數 * 彈簧伸長量
F= - k*△x = m * a
a = -(k/m)*△x
Web VPython 3.2 # 匯入視覺化套件 from vpython import * # 1. 參數設定 # 木塊質量 0.5 kg m = 0.5 # 彈簧的彈性係數 10 N/m k = 10.0 # 時間間隔 dt = 0.001 # 2. 畫面設定 # 畫布 scene = canvas(width=1000, height=1000, background=vector(0.5,0.6,0.5)) # 地板 floor = box(length=3, height=0.01, width=1, texture=textures.stucco) # 牆面 wall = box(length=0.01, height=0.5, width=1, texture=textures.stucco) # 木塊 square = box(length=0.2, height=0.2, width=0.2, texture=textures.wood) # 彈簧 spring = helix(radius=0.06, coils=15, thickness = 0.03) # 設定地板位置 floor.pos = vector(0, 0, 0) # 設定牆面位置 wall.pos = vector(-floor.length/2, wall.height/2, 0) # 設定木塊位置 square.pos = vector(0, square.height/2, 0) # 設定木塊初速 square.v = vector(2,0,0) # 設定彈簧位置 spring.pos = vector(-floor.length/2, square.height/2,0) # 設定彈簧軸線(長度) spring.axis = square.pos-spring.pos # 取得彈簧原長 spring.L = spring.length # 3. 運動部分 while True: rate(1000) #彈簧的加速度 a= ( k / m ) * 彈簧的伸長量 * 彈簧的反方向 square.a = -(k/m)*(spring.length-spring.L) * spring.axis.norm() square.v = square.v + square.a*dt square.pos = square.pos + square.v * dt #求出彈簧的長度 spring.axis = square.pos-spring.pos
執行結果
課堂作業
請畫「時間」與「木塊」的「x座標位置」關係圖。
執行結果
作業提示:
# 時間間隔 dt = 0.001 # 經過時間 t = 0 # 位置圖 gd1 = graph(xtitle='t(s)', ytitle='x(m)', ymax=1, xmax=20, ymin=-1) tx = gcurve(graph=gd1, color=color.yellow) # 3. 運動部分 while True: rate(1000) t = t + dt ...... # 畫出x軸位置圖 tx.plot(pos=(t, square.pos.x))