Hi,我對於以前的天體運行程序 (原貼http://www.cnblogs.com/haoxiaobo/p/3368320.html)又作了一次改進,以下:html
* 增長運動計算的精確度!學習
運動計算加入了上次說的線性取中值(其實就是除於2啦),果真又精確了一點。測試
* 加入相對論修正!spa
在測試中發現有時星體被加速到超光速!發現本身忘記相對論效應啦!此次加入相對論修正。3d
* 增長星體合併!htm
當兩個星距離小於半徑之和時,大星吃掉小星,質量、半徑、顏色、動量發生合併。blog
* 星體支持貼圖!get
能夠構造方法裏指定正方形的星星圖,此圖會被作爲星星的顯示材質。若是不指定,就用指定的顏色畫一個。源碼
下面的圖就是部分效果:效率
* 用真實的比例顯示星體大小!
按真實的星體大小來顯示。這個修改以後,雖然更科學了,但也發現可視性效果差了不少,好比放大到太陽佔到整個屏幕大小了,地球還只是一個點點……,要想看到遠行星,更是須要拖呀拖呀拖呀拖呀……滾呀滾呀滾呀……
宇宙中的尺度真是太大太大太大了,比例真是太大太大太大了……,沒辦法,因而我又發明了幾個功能:小於4個像素的,就畫4個像素質。以及,下面的這些個功能:
* 用Shift+滾輪能夠單獨縮放星體大小!
這樣,就能夠在空間比例不變的狀況下,縮放星星的大小,能夠把星星放大到能夠在屏幕上看到。
下圖就是把全部星體放大5000倍的樣子。
* 空格鍵能夠縮放當前跟隨的星體到合適的大小來觀看!
在跟隨某星觀察時,能夠按下空格鍵,當即把空間比例縮放到一個合適顯示這個星星的大小,並定在屏幕正中。
誰能找出爲何有些星星會在一些大比例顯示時會輕微地晃動?
* 鼠標點擊選擇相機跟隨!
原來用C鍵切換相機跟隨星體。星星多了就不方便了。如今用鼠標在屏幕上直接點選星星進行跟隨。
同時,也把標籤(L)、軌跡(O)、速度(V)等設爲默認不顯示。當跟隨時,或是鼠標在星星上晃時才顯示。提升了重繪效率了。
--------------------------------------------------------------------------------
如下是還能夠加入的功能。不過近期不會再作了。
* 引力潮
如今的程序裏是把星體作爲質點來計算的,星體的大小隻用於繪圖方面的處理。但實際狀況下,星體之間,面對面的那邊因爲比互相背向的一邊離得遠了一個直徑的距離,受到的引力是不同的,引力差因而就造成了潮汐力,在星體之間離得很遠很遠時,潮汐力很微小,但在星體離得很近時,這個力就很大,大到超過星星自體的引力時,就會讓星星崩解。
我一開始想,若是能加入引力潮下的星體崩解就行了,可是仔細一想,涉及的計算量比較大,在pc上的玩具級模擬程序上,仍是算了吧。
* 史瓦西半徑
如今程序裏的星體合併是出如今兩星接觸時,但在實際中,每一個星星據引力大小都有一個半徑範圍,其餘星體一但進入這個半徑,就不可能再逃出,最終會墜入對方。
通常密度的星體,史瓦西半徑可能會小於真實星體的半徑,但密碼很大的星體,史瓦西半徑就可能會很大,好比黑洞。
因此,如今的程序對於普通天體的合併處理是正確的,但若是加入一個黑洞,不知道會出現什麼事情,也許會天然地遵照這個法則?另外一方面,若是加入黑洞的話,就應該把史瓦西半徑作爲黑洞的半徑來處理,顏色就選黑色吧!
* 3d空間與視圖
其實已經加入Z維的計算了,只是尚未採用3d視圖來處理顯示的問題,那個……OpenGL或是Dx3d什麼的我還沒心思下苦功夫去學習,因此,先就這樣吧。
另外,昨天網友推薦的那個3d太陽系程序,我下載了看了,是固定軌道的簡易演示,並不對真實物理效應進行模擬,3d酷一點點,但裏面沒物理學。
* 行星環
如今全部的行星都是用圓處理的。因而我趕上了土星這個奇葩……那個環無法貼圖。
我想能夠在如今的行星類中派生出一個有環行星的類,來額外畫環。
源碼已經更新:http://files.cnblogs.com/haoxiaobo/StarsScreenSaver.rar