2020年2月28日 星期五

角動量守恆

作者:王一哲
日期: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 制

  1. 小球半徑 size = 0.3
  2. 圓周運動半徑 R = 5
  3. 每經過 1 s 圓周運動半徑縮短量值 dR = 1
  4. 球1旋轉角度 theta1 = 0
  5. 球2旋轉角度 theta2 = pi
  6. 角速度 omega = 2
  7. 時間 t = 0
  8. 時間間隔 dt = 0.00005

畫面設定


  1. 用 sphere 物件產生小球,球1 (b1) 初位置為 (R, 0, 0),球2 (b2) 初位置為 (-R, 0, 0)。
  2. 用 cylinder 物件產生兩個小球之間的桿子 (stick)。
  3. 為了便於看出小球的運動方式,用 ring 物件畫出半徑為 R 的圓形 (circle),再用 cylinder 物件畫出 x 軸 (xaxis) 和 y 軸 (yaxis)。
  4. 用 graph 開啟繪圖物件 (gd),再用 gcurve 物件畫出 ω -t 圖 (wt_plot)。

物體運動部分


  1. 當 $R \geq 2 size$ 時持續執行動畫。
  2. 用角動量守恆定律計算旋轉半徑縮短後的角速度,再將數值指定給變數 omega。
  3. $$\omega' = \left( \frac{R}{R'} \right)^2 \omega = \left( \frac{R}{R - dR \cdot dt} \right)^2 \omega $$
  4. 計算縮短後的旋轉半徑,再將數值指定給變數 R。
  5. 更新小球的旋轉角度、位置。
  6. 更新桿子的位置、軸的長度及方向。
  7. 繪製 ω -t 圖。
  8. 更新時間。


模擬程式畫面截圖




ω -t 圖



結語


這個動畫是假設兩個小球旋轉半徑以固定的速率縮短,如果將兩者改為星球,計算兩者之間的重力,應該就能做出雙星系統因為重力作用一邊旋轉、一邊互相接近的動畫,有興趣的同學可以嘗試看看。






HackMD 版本連結:https://hackmd.io/@yizhewang/HkPMTHUN8

沒有留言:

張貼留言