利用簡單的力學法則來模擬天體運行

Hi,各位,又是我。html

昨天我發表了我寫的泡泡屏保的設計思路,以及源碼(http://www.cnblogs.com/haoxiaobo/p/3366625.html),寫完文章後,我想,寫一個也是寫,不如再在這個框架的基本上修改出來一個模擬天體運行的程序,來看看是否是根據簡單的萬有引力定律,星星間是否就真得會繞着轉?程序員

因而,這就是我昨天一下午的成果……編程

有關技術方面的東西,上一個文章裏已經很完整了,再也不多討論了,討論一些其餘方面的事情吧。框架

首先,您注意到我那些漂亮的星星了嗎?spa

星星上有一層模糊的大氣層也!這回是用了圓形路徑加路徑漸變畫筆作的。GDI+簡直就是一個可編程的Photoshop!我還想何時再加上個星星貼圖,把真正的照片貼上去,那就更更酷了!設計

好吧,美術效果放一邊去。htm

 

星體的運動計算blog

 

每次計算時,先計算與其餘星體間的引力大小,引力對本身產生加速度,加速度在一個計算週期裏對速度的影響(仍是平行四邊形法則),而後改變速度。get

把速度乘以這個計算週期以來所流逝的時間,而後在x,y兩個方向上影響到位置上。源碼

 

這個程序更有趣的用處還有什麼呢?

程序裏的太空是用真實的數據來計算的,1就是1m,就是1秒,只是在繪製時進行縮放與變換。

爲了驗證程序是否是正確,我定義了太陽和九大行星,把從維基百科裏找出來的行星軌道半徑、質量、速度放進去,而後讓個人太陽系運行,結果你猜如何? 地球真得365天轉了一週!月亮也會28天繞地球一週!水星是90左右,等等。

因此,能夠用來玩一些有意思的……

 

在地球的L3點加入一顆對稱的行星如何?

太陽系裏撞入一個另外一個與太陽差很少大的恆星,會發生什麼事情?

放入一個由反物質(負質量)組成的行星會如何?

試試《三體》裏說的那種亂世界,看看三顆恆星在一塊兒會軌道如何?

試試看在同一個軌道上等距離地放8個行星,能不能造成一個穩定的天體系統?

有科學家說,萬有引力常數只要調整大一點點或是小一點點,如今的星系就不會造成。試試看呢?

 

下圖是我在太陽系裏放進去了另外一個太陽的結果,結果行星們被弄得亂七八糟,一些行星被壞太陽的引力拋出了太陽系,向着無盡的夜空不歸地前行……

還有一些好玩的熱鍵功能

相機跟隨:就是老是把鏡頭定在一個星體上,跟着看。

切換參考系:就是把正在跟隨的星體設爲絕對不動,全部其餘星體的位置都以它爲參考——也就是至關於你站在這個星星上啦。

 

好吧還有一些沒有作到的事情……

1.貼圖質材。

2.對引力沿路徑積分:我使用的是萬有引力公式來計算兩個星體之間的引力,但在計算時,因爲距上次計算時間已通過去了一段長度,這段時間裏,引力的大小與方向都在變化,並且與星體受力後走過的路徑有關。我知道最好的辦法是用積分,可是個人高數知識都忘光光啦!因此就只好用線性的方法來算,也就是隻是按週期終態的狀況,用加速度時間,而後再加到速度上,而後再簡單地用速度乘週期時間,再加到位置上。

結果就是時間倍數越快,運動偏差就越大。時間倍數越慢,偏差就小。

若是能積分一下什麼的,偏差應該就會大幅減小。那怕是算是一箇中間值也會精確一點。

但就先這樣吧。

 

3.兩星相撞時,應該合而爲一,動量合併。可是我如今沒處理這個,因而兩星就會被引力彈弓唰地一下拋出屏幕,這個很不科學,很差意思。

 

4.只在一個平面裏計算,沒考慮Z維度。

 

一點感觸:一天的工做比得上古人幾十年

除了其中沒有用積分的事兒以外,現代程序員一下午用計算機對天體運行進行的研究,所獲得的成果,可能能超出了古代科學家幾十年的認識。牛頓引力公式原本是簡單的初級算術公式,這個公式會致使行星軌道是什麼樣呢?因而偉大的牛頓發明了微積分,通過計算髮現是個橢圓。但我這個只懂初等數學的高中綴學生,花一下午就能用計算機模擬出來一個世界,把行星當玩撞球同樣拋進引力場中來回觀察結果。

因此說科學的進步絕對是爆炸式的加速進行的,只要信仰科學,好日子就在前頭!

 

下載源碼: http://files.cnblogs.com/haoxiaobo/StarsScreenSaver.rar

相關文章
相關標籤/搜索