随笔 - 373  文章 - 1  评论 - 771  阅读 - 137万

三体运动的程序模拟

      前几天看了《三体》,很不错的科幻小说。说到三体,我想到我大学的一个舍友叫王晶,和香港那个导演同名同姓同性别.记得有一次几个同学在一块聊天,有个女生问他:父母为什么给他取名叫晶.他说叫晶是父母希望能有三个太阳守护着他。那时我还很单纯,不会用五行缺什么的话来讽刺他,只是说,如果给他起名叫王晶晶的话,那就有6个太阳守护他了.现在对三体有了一些了解,才意识到被三个太阳罩着,那不叫守护,应该是被蹂躏.三体内的行星,感觉是被三个恒星玩弄于股掌之间,如同球一样踢来踢去.

      空间中三个星体,受万有引力作用下的运动被称为三体运动,这是最简单且引人注目的混沌。混沌确定系统是庞加莱在研究三体问题时第一次发现的。仅仅三颗星体的运动,就能变得复杂而眩目。这种复杂曾令数学家们在百年间困惑不已。如果只有两个天体,那么一切是多么简单,18世纪的伯努利就已解出了运动的所有可能轨迹,用合适的坐标,就能用简单的曲线描述。但仅仅是多了一个天体,就要等到19世纪的庞加莱,才给出了差强人意的答案:没有漂亮的解(正式术语是三体系统是不可积的)。这并非因为人类的智慧所限,而是从本质上来说,三个天体之间的运动轨迹不可能用简单的式子表达。自然并不像原来期盼的那么简单,它的复杂性令人绝望。但正是这种复杂性孕育了无数可能。并非所有三体系统都不可理解,通过合适的构造,我们可以得到一些会沿着既定曲线运转的系统。通过合适地安排速度和位置,我们也可以使其中一颗星体按照任意给定的顺序探访其余两颗星体。但这些系统是如此脆弱,一点点扰动就会打破微妙的平衡,后果可能是其中一颗星体被抛射出去,从此分道扬镳。混沌,似乎代表了无尽的不确定性,以及所带来的恐惧,就像我们的祖先曾感受过的那样。

     软件运行后,会有三个大点的球代表恒星,三个球互相影响着旋转.可以为三体世界添加一个行星,和一个彗星.可以看到行星的恒纪元,乱纪元.

      代码使用万有引力和势能动能守恒定律为基础,详细见我上一篇文章:行星运动轨迹的程序实现.当然程序写得很简化,其精度是没法保证的.如果真要做精确的话,微积分是必需的.还有就是在恒纪元时,行星容易进入恒星的内部,所以我做了点篡改,保证行星在恒星外部旋转.这一修改会使用行星的轨迹线不够平滑.

 

 

 

程序启动后,会出现三个随机大小的球体在运动.

鼠标右键用于控制视角
键盘U用于开关UI用户界面.
通过UI用户界面可以设置三个球体的质量,设置万有引力系数,设置天体运行速度,设置球体的显示大小.

键盘1,2,3用于开关三个球体运动轨迹的显示
键盘9,用于开关行星,启动后,会有一个小球体被三体所吸引
键盘0,用于开关慧星,启动后,会有发射一个球体.
键盘4,5分别用于开关行星和彗星运动轨迹的显示

键盘G,用于开关三维网格的显示
键盘C,用于开关坐标轴的显示
键盘P,用于暂停
键盘R,用于重置,这时会随机为三个球体设置质量与初速度.

软件下载地址:https://files.cnblogs.com/WhyEngine/Chaos.7z

如果对N体运动有兴趣可以看下我的下篇文章:N体运动的程序模拟

posted on   叶飞影  阅读(44179)  评论(18编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示