本文涉及影片內容,但算不上劇透。想看還未看的同窗請謹慎閱讀。
春節檔的幾部電影裏,《 流浪地球 》成爲一匹黑馬,刷爆微博和朋友圈,從最初不高的排片率,一躍上升到票房榜首。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的編程教室