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