• 模拟天体运行


    利用简单的力学法则来模拟天体运行

    Posted on 2013-10-14 14:19 HAL9000 阅读(553) 评论(10编辑 收藏

    Hi,各位,又是我。

    昨天我发表了我写的泡泡屏保的设计思路,以及源码(http://www.cnblogs.com/haoxiaobo/p/3366625.html),写完文章后,我想,写一个也是写,不如再在这个框架的基本上修改出来一个模拟天体运行的程序,来看看是不是根据简单的万有引力定律,星星间是否就真得会绕着转?

    于是,这就是我昨天一下午的成果……

    有关技术方面的东西,上一个文章里已经很完整了,不再多讨论了,讨论一些其他方面的事情吧。

    首先,您注意到我那些漂亮的星星了吗?

    星星上有一层模糊的大气层也!这回是用了圆形路径加路径渐变画笔做的。GDI+简直就是一个可编程的Photoshop!我还想什么时候再加上个星星贴图,把真正的照片贴上去,那就更更酷了!

    好吧,美术效果放一边去。

    星体的运动计算

    每次计算时,先计算与其他星体间的引力大小,引力对自己产生加速度,加速度在一个计算周期里对速度的影响(还是平行四边形法则),然后改变速度。

    把速度乘以这个计算周期以来所流逝的时间,然后在x,y两个方向上影响到位置上。

    这个程序更有趣的用处还有什么呢?

    程序里的太空是用真实的数据来计算的,1就是1m,就是1秒,只是在绘制时进行缩放与变换。

    为了验证程序是不是正确,我定义了太阳和九大行星,把从维基百科里找出来的行星轨道半径、质量、速度放进去,然后让我的太阳系运行,结果你猜如何? 地球真得365天转了一周!月亮也会28天绕地球一周!水星是90左右,等等。

    所以,可以用来玩一些有意思的……

    在地球的L3点加入一颗对称的行星如何?

    太阳系里撞入一个另一个与太阳差不多大的恒星,会发生什么事情?

    放入一个由反物质(负质量)组成的行星会如何?

    试试《三体》里说的那种乱世界,看看三颗恒星在一起会轨道如何?

    试试看在同一个轨道上等距离地放8个行星,能不能形成一个稳定的天体系统?

    有科学家说,万有引力常数只要调整大一点点或是小一点点,现在的星系就不会形成。试试看呢?

    下图是我在太阳系里放进去了另一个太阳的结果,结果行星们被弄得乱七八糟,一些行星被坏太阳的引力抛出了太阳系,向着无尽的夜空不归地前行……

    还有一些好玩的热键功能

    相机跟随:就是总是把镜头定在一个星体上,跟着看。

    切换参考系:就是把正在跟随的星体设为绝对不动,所有其他星体的位置都以它为参考——也就是相当于你站在这个星星上啦。

    好吧还有一些没有做到的事情……

    1.贴图质材。

    2.对引力沿路径积分:我使用的是万有引力公式来计算两个星体之间的引力,但在计算时,由于距上次计算时间已经过去了一段长度,这段时间里,引力的大小与方向都在变化,而且与星体受力后走过的路径有关。我知道最好的办法是用积分,但是我的高数知识都忘光光啦!所以就只好用线性的方法来算,也就是只是按周期终态的情况,用加速度时间,然后再加到速度上,然后再简单地用速度乘周期时间,再加到位置上。

    结果就是时间倍数越快,运动误差就越大。时间倍数越慢,误差就小。

    如果能积分一下什么的,误差应该就会大幅减少。那怕是算是一个中间值也会精确一点。

    但就先这样吧。

    3.两星相撞时,应该合而为一,动量合并。但是我现在没处理这个,于是两星就会被引力弹弓唰地一下抛出屏幕,这个很不科学,不好意思。

    4.只在一个平面里计算,没考虑Z维度。

    一点感触:一天的工作比得上古人几十年

    除了其中没有用积分的事儿之外,现代程序员一下午用计算机对天体运行进行的研究,所得到的成果,可能能超出了古代科学家几十年的认识。牛顿引力公式本来是简单的初级算术公式,这个公式会导致行星轨道是什么样呢?于是伟大的牛顿发明了微积分,经过计算发现是个椭圆。但我这个只懂初等数学的高中缀学生,花一下午就能用计算机模拟出来一个世界,把行星当玩撞球一样抛进引力场中来回观察结果。

    所以说科学的进步绝对是爆炸式的加速进行的,只要信仰科学,好日子就在前头!

    下载源码: http://files.cnblogs.com/haoxiaobo/StarsScreenSaver.rar

     
     
    分类: 技术其他
  • 相关阅读:
    c#中Split等分割字符串的几种方法
    js中的null和undefined的区别
    限制CheckBoxList选中的数量
    js中的boolean原始类型和Boolean引用类型
    div漂浮在flash上面
    关于导出excel是经常出现的几个问题
    关于表的合并
    框架
    Js实现类似图片相册左右切换效果
    DNS域名系统
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3368926.html
Copyright © 2020-2023  润新知