前几天看了《三体》,很不错的科幻小说。说到三体,我想到我大学的一个舍友叫王晶,和香港那个导演同名同姓同性别.记得有一次几个同学在一块聊天,有个女生问他:父母为什么给他取名叫晶.他说叫晶是父母希望能有三个太阳守护着他。那时我还很单纯,不会用五行缺什么的话来讽刺他,只是说,如果给他起名叫王晶晶的话,那就有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体运动的程序模拟