前幾天看了《三體》,很不錯的科幻小說。說到三體,我想到我大學的一個舍友叫王晶,和香港那個導演同名同姓同性別.記得有一次幾個同學在一塊聊天,有個女生問他:父母為什么給他取名叫晶.他說叫晶是父母希望能有三個太陽守護着他。那時我還很單純,不會用五行缺什么的話來諷刺他,只是說,如果給他起名叫王晶晶的話,那就有6個太陽守護他了.現在對三體有了一些了解,才意識到被三個太陽罩着,那不叫守護,應該是被蹂躪.三體內的行星,感覺是被三個恆星玩弄於股掌之間,如同球一樣踢來踢去.
空間中三個星體,受萬有引力作用下的運動被稱為三體運動,這是最簡單且引人注目的混沌。混沌確定系統是龐加萊在研究三體問題時第一次發現的。僅僅三顆星體的運動,就能變得復雜而眩目。這種復雜曾令數學家們在百年間困惑不已。如果只有兩個天體,那么一切是多么簡單,18世紀的伯努利就已解出了運動的所有可能軌跡,用合適的坐標,就能用簡單的曲線描述。但僅僅是多了一個天體,就要等到19世紀的龐加萊,才給出了差強人意的答案:沒有漂亮的解(正式術語是三體系統是不可積的)。這並非因為人類的智慧所限,而是從本質上來說,三個天體之間的運動軌跡不可能用簡單的式子表達。自然並不像原來期盼的那么簡單,它的復雜性令人絕望。但正是這種復雜性孕育了無數可能。並非所有三體系統都不可理解,通過合適的構造,我們可以得到一些會沿着既定曲線運轉的系統。通過合適地安排速度和位置,我們也可以使其中一顆星體按照任意給定的順序探訪其余兩顆星體。但這些系統是如此脆弱,一點點擾動就會打破微妙的平衡,后果可能是其中一顆星體被拋射出去,從此分道揚鑣。混沌,似乎代表了無盡的不確定性,以及所帶來的恐懼,就像我們的祖先曾感受過的那樣。
軟件運行后,會有三個大點的球代表恆星,三個球互相影響着旋轉.可以為三體世界添加一個行星,和一個彗星.可以看到行星的恆紀元,亂紀元.
代碼使用萬有引力和勢能動能守恆定律為基礎,詳細見我上一篇文章:行星運動軌跡的程序實現.當然程序寫得很簡化,其精度是沒法保證的.如果真要做精確的話,微積分是必需的.還有就是在恆紀元時,行星容易進入恆星的內部,所以我做了點篡改,保證行星在恆星外部旋轉.這一修改會使用行星的軌跡線不夠平滑.
程序啟動后,會出現三個隨機大小的球體在運動.
鼠標右鍵用於控制視角
鍵盤U用於開關UI用戶界面.
通過UI用戶界面可以設置三個球體的質量,設置萬有引力系數,設置天體運行速度,設置球體的顯示大小.
鍵盤1,2,3用於開關三個球體運動軌跡的顯示
鍵盤9,用於開關行星,啟動后,會有一個小球體被三體所吸引
鍵盤0,用於開關慧星,啟動后,會有發射一個球體.
鍵盤4,5分別用於開關行星和彗星運動軌跡的顯示
鍵盤G,用於開關三維網格的顯示
鍵盤C,用於開關坐標軸的顯示
鍵盤P,用於暫停
鍵盤R,用於重置,這時會隨機為三個球體設置質量與初速度.
軟件下載地址:http://files.cnblogs.com/WhyEngine/Chaos.7z
如果對N體運動有興趣可以看下我的下篇文章:N體運動的程序模擬