日期:2020/12/23
物理情境
若質量可忽略的桿子長度為$2R$,桿子兩端各連接一顆質量為$m$的球,放置於水平光滑桌面上,以桿子的中央、垂直射出桌面方向為轉軸,起始的角速度為$\omega$。如果小球的旋轉半徑隨著時間縮短,假設後來的旋轉半徑為$R'$、角速度為$\omega'$,根據角動量守恆可得
$$mR^2 \omega = mR'^2 \omega' ~\Rightarrow~ \omega' = \left( \frac{R}{R'} \right)^2 \omega$$
所以當兩個球距離變近時,旋轉的角速率會跟著變快。
模擬程式畫面截圖
模擬動畫程式
GlowScript 網站動畫連結
from vpython import *
"""
1. 參數設定, 設定變數及初始值
"""
size, R, dR = 0.3, 5, 1
theta1, theta2, omega = 0, pi, 2
t, dt = 0, 0.00005
"""
2. 畫面設定
"""
scene = canvas(title="Angular Momentum Conservation", width=600, height=600, x=0, y=0, background=color.black)
b1 = sphere(pos=R*vec(cos(theta1), sin(theta1), 0), radius=size, color=color.red, make_trail=True)
b2 = sphere(pos=R*vec(cos(theta2), sin(theta2), 0), radius=size, color=color.green, make_trail=True)
stick = cylinder(pos=b2.pos, axis=b1.pos-b2.pos, radius=0.2*size, color=color.yellow)
circle = ring(pos=vec(0, 0, 0), axis=vec(0, 0, 1), radius=R, thickness=0.05*size, color=color.white)
xaxis = cylinder(pos=vec(-1.2*R, 0, 0), axis=vec(2.4*R, 0, 0), radius=0.05*size, color=color.cyan)
yaxis = cylinder(pos=vec(0, -1.2*R, 0), axis=vec(0, 2.4*R, 0), radius=0.05*size, color=color.cyan)
gd = graph(title="<i>ω</i> - t plot", width=600, height=450, x=0, y=600,
xtitle="<i>t</i>(s)", ytitle="<i>ω</i>(rad/s)")
wt_plot = gcurve(graph=gd, color=color.red)
"""
3. 物體運動部分
"""
while R >= 2*size:
rate(1000)
omega *= (R / (R-dR*dt))**2
R -= dR*dt
theta1 += omega*dt
theta2 += omega*dt
b1.pos = R*vec(cos(theta1), sin(theta1), 0)
b2.pos = R*vec(cos(theta2), sin(theta2), 0)
stick.pos = b2.pos
stick.axis = b1.pos-b2.pos
wt_plot.plot(t, omega)
t += dt
參數設定
以下所有物理量單位皆為 SI 制
- 小球半徑 size = 0.3
- 圓周運動半徑 R = 5
- 每經過 1 s 圓周運動半徑縮短量值 dR = 1
- 球1旋轉角度 theta1 = 0
- 球2旋轉角度 theta2 = pi
- 角速度 omega = 2
- 時間 t = 0
- 時間間隔 dt = 0.00005
畫面設定
- 用 sphere 物件產生小球,球1 (b1) 初位置為 (R, 0, 0),球2 (b2) 初位置為 (-R, 0, 0)。
- 用 cylinder 物件產生兩個小球之間的桿子 (stick)。
- 為了便於看出小球的運動方式,用 ring 物件畫出半徑為 R 的圓形 (circle),再用 cylinder 物件畫出 x 軸 (xaxis) 和 y 軸 (yaxis)。
- 用 graph 開啟繪圖物件 (gd),再用 gcurve 物件畫出 ω -t 圖 (wt_plot)。
物體運動部分
- 當 $R \geq 2 size$ 時持續執行動畫。
- 用角動量守恆定律計算旋轉半徑縮短後的角速度,再將數值指定給變數 omega。 $$\omega' = \left( \frac{R}{R'} \right)^2 \omega = \left( \frac{R}{R - dR \cdot dt} \right)^2 \omega $$
- 計算縮短後的旋轉半徑,再將數值指定給變數 R。
- 更新小球的旋轉角度、位置。
- 更新桿子的位置、軸的長度及方向。
- 繪製 ω -t 圖。
- 更新時間。
模擬程式畫面截圖
ω -t 圖
結語
這個動畫是假設兩個小球旋轉半徑以固定的速率縮短,如果將兩者改為星球,計算兩者之間的重力,應該就能做出雙星系統因為重力作用一邊旋轉、一邊互相接近的動畫,有興趣的同學可以嘗試看看。
HackMD 版本連結:https://hackmd.io/@yizhewang/HkPMTHUN8
沒有留言:
張貼留言