# 角動量守恆 > 作者:王一哲 > 日期:2020/2/28 <br /> ## 物理情境 若質量可忽略的桿子長度為$2R$,桿子兩端各連接一顆質量為$m$的球,放置於水平光滑桌面上,以桿子的中央、垂直射出桌面方向為轉軸,起始的角速度為$\omega$。如果小球的旋轉半徑隨著時間縮短,假設後來的旋轉半徑為$R'$、角速度為$\omega'$,根據角動量守恆可得 $$mR^2 \omega = mR'^2 \omega' ~\Rightarrow~ \omega' = \left( \frac{R}{R'} \right)^2 \omega$$ 所以當兩個球距離變近時,旋轉的角速率會跟著變快。 <br /> <img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/vjYC19W.png"> <div style="text-align:center">模擬程式畫面截圖</div> <br /> ## 模擬動畫程式 [GlowScript 網站動畫連結](https://www.glowscript.org/#/user/yizhe/folder/Public/program/AngularMomentum) ```python= 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 ``` <br /> ### 參數設定 以下所有物理量單位皆為 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。 $$\omega' = \left( \frac{R}{R'} \right)^2 \omega = \left( \frac{R}{R - dR \cdot dt} \right)^2 \omega $$ 3. 計算縮短後的旋轉半徑,再將數值指定給變數 R。 4. 更新小球的旋轉角度、位置。 5. 更新桿子的位置、軸的長度及方向。 6. 繪製 ω -t 圖。 7. 更新時間。 <img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/vjYC19W.png"> <div style="text-align:center">模擬程式畫面截圖</div> <br /> <img style="display: block; margin-left: auto; margin-right: auto" height="60%" width="60%" src="https://imgur.com/KrnuBvA.png"> <div style="text-align:center">ω -t 圖</div> <br /> ## 結語 這個動畫是假設兩個小球旋轉半徑以固定的速率縮短,如果將兩者改為星球,計算兩者之間的重力,應該就能做出雙星系統因為重力作用一邊旋轉、一邊互相接近的動畫,有興趣的同學可以嘗試看看。 <br /> --- ###### tags:`VPython`