# Lecture 6 雙星運動與日地月三行星運動 完整作業參考解法
>建國高中特色選修課程 - 物理現象的程式設計與模擬
>作者:賴奕帆
>日期:2018/8/08
:::success
* 同學們,在看參考解之前,請先想清楚自己是否真的有花時間想過如何寫課堂作業和進階作業了呢?
* 學習無他,但求自己覺得好玩而已。
* 若真的想把一件事情學好,務必花時間才能掌握。
* 希望這邊的作業參考解法,真的都只是讓同學們拿來參考,而不是為了繳交作業的複製貼上。
* 想過了嗎? 那請認真參考吧。
:::
### 檢核作業 6-1
利用圖表,討論雙星運動是否有遵守力學能守恆。
註:在雙星運動中,動能有兩個,而位能依然只有一個,其公式依然為$$U(r)=-\frac{GMm}{r} (高二物理第七章「功、動能與位能」)$$
![](https://i.imgur.com/9U0wqtq.png)
:::success
#### 檢核作業 6-1 參考解法步驟 :
1. 在畫面設定處,準備畫出動能1、動能2、位能與總力學能四條曲線
```python3=27
"""加入圖表 (2. 畫面設定)"""
gd = graph(align='left',width=400,height=400,
title='K1+K2+U=E', xtitle='t', ytitle='E(red) , K1(black) , K2(blue) , U(green)',
foreground=color.black,background=color.white,
xmax=100, xmin=0, ymax=15, ymin=-25)
f1 = gcurve(color=color.red)
f2 = gcurve(color=color.black)
f3 = gcurve(color=color.blue)
f4 = gcurve(color=color.green)
```
2. 在執行迴圈處,分別計算任意瞬間的動能1、動能2、位能與總力學能
```python3=45
"""計算衛星運動中的動能1、動能2、位能與總力學能 (3. 執行迴圈)"""
materK1 = 0.5*m1*_____________________________ #動能1
materK2 = 0.5*m2*_____________________________ #動能2
materU = -G*m1*m2/dist #位能
materE = materK1+ materK2 + materU #總力學能
```
3. 在執行迴圈處,將算出的能量匯入圖表之中
```python3=50
"""將動能1、動能2、位能與總力學能匯入圖表 (3. 執行迴圈)"""
f1.plot(pos=(t,materE))
f2.plot(pos=(t,materK1))
f3.plot(pos=(t,materK2))
f4.plot(pos=(t,materU))
```
:::
### 檢核作業 6-2
請在日地月三星運動中,幫月球加入受地球、太陽與合力的向量箭頭,讓我們能利用動畫更清楚的理解為何月球能依此軌跡運動。
![](https://i.imgur.com/gaYvMtD.png)
:::success
#### 檢核作業 6-2 參考解法步驟 :
1. 月球繪製三個受力向量箭頭(黃色是受太陽引力、藍色是受地球引力、黑色是所受合力)
```python3=26
"""繪製三個受力箭頭(2. 畫面設定)"""
arrow_31 = arrow(pos=ball_m3.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.yellow)
arrow_32 = arrow(pos=ball_m3.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.blue)
arrow_3 = arrow(pos=ball_m3.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.black)
```
2. 在執行迴圈中讓箭頭隨著月球與所受引力運動
```python3=40
"""讓三受力箭頭,隨著月球一起運動(3. 執行迴圈)"""
arrow_31.pos = ___________
arrow_31.axis = ___________
arrow_32.pos = ___________
arrow_32.axis = ___________
arrow_3.pos = ___________
arrow_3.axis = ___________
```
:::
### 指定作業 6-1
請同學嘗試寫出理想的三星運動模型。
:::warning
範例【指考】
質量均為m,且兩兩相距L之三個星球成一獨立系統,而環繞共同質心運動,求:
(1)向心加速度量值 (2)軌道速率 各為何?
![](https://i.imgur.com/9uwjDBZ.png)
:::danger
【參考解答】
(1) 星球所受到其他兩個星體的引力為
$F = 2\times \frac{Gm^{2}}{L^{2}}\times \cos 60 = 2\times \frac{Gm^{2}}{L^{2}}\times\frac{\sqrt{3}}{2}=\frac{\sqrt{3}Gm^{2}}{L^{2}}\rightarrow a=\frac{\sqrt{3}Gm}{L^{2}}$
(2) 質心與星球之間的距離為
$r = \frac{\sqrt{3}}{2}L\times \frac{2}{3} = \frac{\sqrt{3}}{3}L$代入向心加速度公式$a= \frac{v^{2}}{r}$
得$\frac{\sqrt{3}Gm}{L^{2}}=\frac{v^{2}}{\frac{\sqrt{3}}{3}L}\rightarrow v=\sqrt{\frac{Gm}{L}}$
:::
:::success
#### 指定作業 6-1 參考解法步驟 :
1. 設定參數,包含質量、大小等,以三角形質心為圓點,將三個星球放置在三角型各自距離L的位置上。
```python3=22
"""帶入理想三星運動的位置與速率,以利到完美的三星正圓形的軌跡 (2. 畫面設定)"""
ball_m1 = sphere(pos=vec(0,R,0), radius=0.2, color = color.yellow, make_trail=True)
ball_m2 = sphere(pos=vec(R*cos(pi/6),-R*sin(pi/6),0), radius=0.2, color = color.red, make_trail=True)
ball_m3 = sphere(pos=vec(-R*cos(pi/6),-R*sin(pi/6),0), radius=0.2, color = color.blue, make_trail=True)
ball_m1_v = vector(-v0,0,0)
ball_m2_v = vector(v0*cos(pi/3),v0*sin(pi/3),0)
ball_m3_v = vector(v0*cos(pi/3),-v0*sin(pi/3),0)
```
2. 讓三星彼此受到互相的萬有引力作用,並使其產生加速度,會因引力影響而使三星均往質心運動。
```python3=40
"""讓任一星受其他兩星的受力,並使其開始運動,範例只寫m1衛星 (3. 執行迴圈)"""
dist_12 = mag(ball_m1.pos - ball_m2.pos)
radiavector_12 = (ball_m1.pos-ball_m2.pos)/dist_12
Fg_vector_12 = Fg(dist_12)*radiavector_12
dist_31 = mag(ball_m3.pos - ball_m1.pos)
radiavector_31 = (ball_m3.pos-ball_m1.pos)/dist_31
Fg_vector_31 = Fg(dist_31)*radiavector_31
ball_m1_v += (-Fg_vector_31+Fg_vector_12)/m1*dt #注意,球一的受力方向與球二的方向相反
ball_m1.pos = ball_m1.pos + ball_m1_v*dt
```
3. 若更進一步,可以畫出衛星受力與合力的箭頭,更能由動畫中,觀察物體受力的感覺。
```python3=30
"""設定四個箭頭,分別代表其他兩星的引力、合力與速度(2. 畫面設定)"""
F1_arrow = arrow(pos=ball_m1.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.black)
F13_arrow = arrow(pos=ball_m1.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.blue)
F12_arrow = arrow(pos=ball_m1.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.red)
v1_arrow = arrow(pos=ball_m1.pos,axis=vec(0,0,0),shaftwidth=0.1 ,color = color.yellow)
```
```python3=60
"""讓箭頭可以隨衛星運動,並能表達其量值(3. 執行迴圈)"""
F1_arrow.pos = ball_m1.pos
F1_arrow.axis = (-Fg_vector_31+Fg_vector_12)
F13_arrow.pos = ball_m1.pos
F13_arrow.axis = (-Fg_vector_31)
F12_arrow.pos = ball_m1.pos
F12_arrow.axis = (Fg_vector_12)
v1_arrow.pos = ball_m1.pos
v1_arrow.axis = ball_m1_v
```
* 同學可以嘗試寫出理想的四星運動模型。
:::
### 指定作業 6-2
請修正前述周期的方法,找出真正的月球繞地球一次滿月的週期,請發揮同學問題解決的能力吧。
:::warning
範例【指考】
月球繞地球一周需時27.3天,1年中有365.25天,求連續兩次月圓之間相隔多久? (即求農曆一個月是幾天?)
【觀念】月球公轉及自轉的時間均為27.3天
【觀念】兩次月圓之間,地球繞日公轉經過$\theta$角,而月球繞地球公轉經過$(360+\theta)$角
![](https://i.imgur.com/KL2wSte.png)
:::danger
【參考解答】
設兩次月圓需$t$天,對地球而言,$t$天繞太陽轉$\theta$角
$\frac{t}{365.25}=\frac{\theta}{360}$
對月球而言,$t$天繞地球$(360+\theta)$角
$\frac{t}{27.3}=\frac{360+\theta}{360}=1+\frac{\theta}{360}$
則整理後可得
$\frac{t}{27.3}=\frac{360+\theta}{360}=1+\frac{t}{362.5}\rightarrow t=\frac{365.25\times 27.3}{365.25-27.3}=29.5$
:::
:::success
#### 指定作業 6-2 參考解法步驟 :
1. 前述找週期的方法是當地球與月球相對太陽右端點位置時,重置列印t1與t2的時間,以計算地球與月球繞行週期。
2. 但實際上一次滿月的時間是兩次**日地月**連線時間的週期,所以需重新修改if寫法,以利找出真正滿月的週期。
```python3=56
"""在設定一個t3,以計算真正滿月的週期(1. 參數設定)"""
t1 = 0 #給地球算週期
t2 = 0 #給月球算週期
t3 = 0 #計算真正滿月的週期
```
```python3=56
"""利用日地月三星連線,換算週期(3. 執行迴圈)"""
if pre_m1m2_rv.x > pre_pre_m1m2_rv.x and pre_m1m2_rv.x > radiavector_12.x :
earth_T = t1/86400.0 #設定earth_T為地球週期
print ('earth_t=' , '%1.2f'%earth_T)
t1=0 #時間重置
#找月球相對地球右端點位置
if pre_m2m3_rv.x > pre_pre_m2m3_rv.x and pre_m2m3_rv.x > radiavector_23.x :
moon_T = t2/86400.0 #設定moon_T為月球週期
print ('moon_T=' , '%1.2f'%moon_T)
t2=0 #時間重置
#找月球相對地球向量與太陽相對地球向量相減最小的位置
if mag(pre_m1m2_rv-pre_m2m3_rv) > mag(pre_pre_m1m2_rv-pre_pre_m2m3_rv) and mag(pre_m1m2_rv-pre_m2m3_rv) > mag(radiavector_12-radiavector_23) :
moon_T2 = t3/86400.0 #設定moon_T2為月球週期2
print ('moon_T2=' , '%1.2f'%moon_T2)
t3=0 #時間重置
```
* 利用日地月連線計算所得的週期約為28.6日。
* 此處未考慮星體間軌道的傾角關係,且真實軌道也並非我們預設的正圓形軌道,我們以目前的條件設定下得到了合理的結果。
![](https://i.imgur.com/LPJ9u7s.png)
:::