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