用python模擬《流浪地球》的木星引力彈弓效應

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

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

看過影片的人可能會有一個疑問, 太陽系那麼空曠,爲何地球在「流浪」的過程當中,非要做死往木星上靠?編程

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

引力彈弓效應

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

利用這個辦法,能夠 在不額外消耗燃料的狀況下,使太空探測器獲得加速或者減速 ,取決於與行星接觸的角度)。這看起來彷佛不符合能量守恆定律和動量守恆定律,實則是由於行星的質量相較飛行器來講太大了,其速度的變化能夠忽略不計。人工智能

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

來源:wikipedia-重力助推code

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

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

利用引力彈弓加速ip

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

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

利用引力彈弓減速

視頻版

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的編程教室

相關文章
相關標籤/搜索