利用简单的力学法则来模拟天体运行
Hi,各位,又是我。
昨天我發(fā)表了我寫的泡泡屏保的設(shè)計思路,以及源碼(http://www.cnblogs.com/haoxiaobo/p/3366625.html),寫完文章后,我想,寫一個也是寫,不如再在這個框架的基本上修改出來一個模擬天體運行的程序,來看看是不是根據(jù)簡單的萬有引力定律,星星間是否就真得會繞著轉(zhuǎn)?
于是,這就是我昨天一下午的成果……
有關(guān)技術(shù)方面的東西,上一個文章里已經(jīng)很完整了,不再多討論了,討論一些其他方面的事情吧。
首先,您注意到我那些漂亮的星星了嗎?
星星上有一層模糊的大氣層也!這回是用了圓形路徑加路徑漸變畫筆做的。GDI+簡直就是一個可編程的Photoshop!我還想什么時候再加上個星星貼圖,把真正的照片貼上去,那就更更酷了!
好吧,美術(shù)效果放一邊去。
星體的運動計算
每次計算時,先計算與其他星體間的引力大小,引力對自己產(chǎn)生加速度,加速度在一個計算周期里對速度的影響(還是平行四邊形法則),然后改變速度。
把速度乘以這個計算周期以來所流逝的時間,然后在x,y兩個方向上影響到位置上。
這個程序更有趣的用處還有什么呢?
程序里的太空是用真實的數(shù)據(jù)來計算的,1就是1m,就是1秒,只是在繪制時進行縮放與變換。
為了驗證程序是不是正確,我定義了太陽和九大行星,把從維基百科里找出來的行星軌道半徑、質(zhì)量、速度放進去,然后讓我的太陽系運行,結(jié)果你猜如何? 地球真得365天轉(zhuǎn)了一周!月亮也會28天繞地球一周!水星是90左右,等等。
所以,可以用來玩一些有意思的……
在地球的L3點加入一顆對稱的行星如何?
太陽系里撞入一個另一個與太陽差不多大的恒星,會發(fā)生什么事情?
放入一個由反物質(zhì)(負質(zhì)量)組成的行星會如何?
試試《三體》里說的那種亂世界,看看三顆恒星在一起會軌道如何?
試試看在同一個軌道上等距離地放8個行星,能不能形成一個穩(wěn)定的天體系統(tǒng)?
有科學(xué)家說,萬有引力常數(shù)只要調(diào)整大一點點或是小一點點,現(xiàn)在的星系就不會形成。試試看呢?
下圖是我在太陽系里放進去了另一個太陽的結(jié)果,結(jié)果行星們被弄得亂七八糟,一些行星被壞太陽的引力拋出了太陽系,向著無盡的夜空不歸地前行……
還有一些好玩的熱鍵功能
相機跟隨:就是總是把鏡頭定在一個星體上,跟著看。
切換參考系:就是把正在跟隨的星體設(shè)為絕對不動,所有其他星體的位置都以它為參考——也就是相當(dāng)于你站在這個星星上啦。
好吧還有一些沒有做到的事情……
1.貼圖質(zhì)材。
2.對引力沿路徑積分:我使用的是萬有引力公式來計算兩個星體之間的引力,但在計算時,由于距上次計算時間已經(jīng)過去了一段長度,這段時間里,引力的大小與方向都在變化,而且與星體受力后走過的路徑有關(guān)。我知道最好的辦法是用積分,但是我的高數(shù)知識都忘光光啦!所以就只好用線性的方法來算,也就是只是按周期終態(tài)的情況,用加速度時間,然后再加到速度上,然后再簡單地用速度乘周期時間,再加到位置上。
結(jié)果就是時間倍數(shù)越快,運動誤差就越大。時間倍數(shù)越慢,誤差就小。
如果能積分一下什么的,誤差應(yīng)該就會大幅減少。那怕是算是一個中間值也會精確一點。
但就先這樣吧。
3.兩星相撞時,應(yīng)該合而為一,動量合并。但是我現(xiàn)在沒處理這個,于是兩星就會被引力彈弓唰地一下拋出屏幕,這個很不科學(xué),不好意思。
4.只在一個平面里計算,沒考慮Z維度。
一點感觸:一天的工作比得上古人幾十年
除了其中沒有用積分的事兒之外,現(xiàn)代程序員一下午用計算機對天體運行進行的研究,所得到的成果,可能能超出了古代科學(xué)家?guī)资甑恼J識。牛頓引力公式本來是簡單的初級算術(shù)公式,這個公式會導(dǎo)致行星軌道是什么樣呢?于是偉大的牛頓發(fā)明了微積分,經(jīng)過計算發(fā)現(xiàn)是個橢圓。但我這個只懂初等數(shù)學(xué)的高中綴學(xué)生,花一下午就能用計算機模擬出來一個世界,把行星當(dāng)玩撞球一樣拋進引力場中來回觀察結(jié)果。
所以說科學(xué)的進步絕對是爆炸式的加速進行的,只要信仰科學(xué),好日子就在前頭!
下載源碼:http://files.cnblogs.com/haoxiaobo/StarsScreenSaver.rar
總結(jié)
以上是生活随笔為你收集整理的利用简单的力学法则来模拟天体运行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信表情翻译成文字代码大全
- 下一篇: 【转载】按键精灵对安卓APP进行自动化界