用python模擬地球飛越木星

本文涉及影片內容,但算不上劇透。想看還未看的同學請謹慎閱讀。

春節檔的幾部電影裏,《 流浪地球 》成爲一匹黑馬,刷爆微博和朋友圈,從最初不高的排片率,一躍上升到票房榜首。

看過影片的人可能會有一個疑問, 太陽系那麼空曠,爲什麼地球在“流浪”的過程中,非要作死往木星上靠?

這就牽涉到一個時常在影視作品中拿來做文章,實際在太空探測中很常見的一個概念:

引力彈弓效應

當一個飛行器飛過一個行星時,如果距離較近,就會受到行星的引力影響:靠近時會逐漸加速,遠離時會逐漸減速。由於能量守恆,飛行器在進入和離開行星軌道時,與行星的相對速度大小沒有變化,但方向卻發生了變化。再加上行星本身的速度,從旁觀者角度來看,飛行器的速度就發生了變化。舉個更通俗的例子: 你把一個網球以速度 v 砸向一面牆,球會以同樣的速度 v 反彈回來;而如果你以速度 v 砸向一個以速度 u 迎面開來卡車頭上,網球則會以 v + 2u 的速度反彈回來(相對速度 v + u 加上卡車速度 u)

利用這個辦法,可以 在不額外消耗燃料的情況下,使太空探測器得到加速或者減速 ,取決於與行星接觸的角度)。這看起來似乎不符合能量守恆定律和動量守恆定律,實則是因爲行星的質量相較飛行器來說太大了,其速度的變化可以忽略不計。

目前離地球最遠人造物體: 旅行者1號 ,當年就連續利用了 木星土星 進行了加速。

來源:wikipedia-重力助推

而在影片中,也就是 爲了獲取更大的速度以脫離太陽系 ,人類才選擇 藉助木星的引力彈弓效應

出於好奇,我 用 python (pygame)寫了一個簡化的仿真,模擬地球飛越木星時可能發生的情況:

利用引力彈弓加速

速度太快或距離太遠,加速效果不明顯

速度太慢或距離太近,墜入木星

利用引力彈弓減速

視頻版

python模擬木星引力彈弓效應 https://www.zhihu.com/video/1079021435854548992

通過幾次測試,我發現這“彈弓”可不是那麼好用的,離得遠了沒啥效果,離得太近又可能被引力捕獲,撞在木星上(事實在撞上之前,地球就會因達到 洛希極限 而被撕裂)。

至於劇中發生了什麼,我這裏也就不多說了。

我這個模擬代碼中,爲了視覺效果,地球和木星的大小,以及他們的相對距離是不成比例的,否則會更小。而且爲了讓速度變化更明顯,對運行速度也做了放大。所以 從絕對數值上來說是不準確的,但相對變化都是通過基本物理定律計算得出的

核心部分代碼:



# 地木座標差
delta_x = (jupiter[0] - earth[0]) * k
delta_y = (jupiter[1] - earth[1]) * k
# 地木距離平方
r2 = delta_x ** 2 + delta_y ** 2
# 地木間引力,萬有引力定律
F = G * m * M / r2
# 地木夾角
theta = math.acos(delta_x / r2 ** 0.5)
# x、y 軸引力分量
fx = abs(F * math.cos(theta)) * sign(delta_x)
fy = abs(F * math.sin(theta)) * sign(delta_y)
# x、y 軸加速度,牛頓第二定律 F = ma
ax = fx / m
ay = fy / m
# 速度變化,vt = v0 + at
vel_x += ax * t
vel_y += ay * t
# 位移變化,st = s0 + vt
pos_x += vel_x * t / k
pos_y += vel_y * t / k

相關參數:



k = 1e7            # 距離縮放參數
m = 5.9742e24      # 地球質量
M = 1898.7e27      # 木星質量
G = 6.67259e-17    # 萬有引力常量
t = 1e5            # 時間縮放參數
pos_x= 0           # 地球座標
pos_y= 550earth = pos_x, pos_y
vel_x= 300         # 地球速度
vel_y= 0jupiter = 700, 150 # 木星座標
v_j = 3            # 木星速度

想要測試不同效果,可以調整座標、速度等參數。

“引力彈弓”的概念在幾年前的《 星際穿越 》和《 火星救援 》中都有提及,我一直想寫個模擬,直到這次趁《流浪地球》熱映的機會才動手實現。這部電影我從去年7月尚未跳票之時比較期待,也看過原著,本來還擔心會不會排片太少,沒想到會火成這樣。這裏面當然有很多偶然的商業因素,影片本身也有很多不足,但我作爲一個“科學愛好者”,樂見如此。之前流產的《 三體 》電影版或許也因此有機會重新投胎。

希望以後會有更多精彩的科幻作品出現,也希望更多的人在低頭忙碌之餘能擡頭仰望星空。

模擬代碼已上傳,獲取請在公衆號( Crossin的編程教室 )中回覆關鍵字: 引力

════

其他文章及回答:

如何自學Python | 新手引導 | 精選Python問答 | Python單詞表 | 人工智能 | 爬蟲 | 我用Python | requests | 計算機視覺 | 字符播放器 | 一圖學Python | 智能防擋彈幕

歡迎搜索及關注: Crossin的編程教室

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章