数字虚空\/Digital Void 编写手记:精确计时与运动模拟

也就是观察者坐标系的Z轴标记反了。而矩阵公式中所谓的“相对于某轴旋转X度”,经过我的实验发现应该是:正面对此轴(轴投影是个点,而不是叉,绕轴逆时针旋转X度。(看起来就是原坐标系顺时针旋转了
X
度)
而投影的区域我们设定为z负半轴区域。

╮(╯_╰)╭
现在主界面的样子:

实体管理子窗口还会有大的改动,因为还没做和数据库的链接,所以只是在程序里预设了两个实体来测试,以后和数据库(ADO.NET)连上后,无论实体数据还是运动数据都会和数据库绑定就是了。
所以这几天除了各种DEBUG以外,完成的两个功能就是:Timer的精确计时,以及实体运动模拟的基本测试,所谓实体就是上面两个黑点,本来我还想画漂亮点的,不过……嘛,后期优化的时候再说~~
C#可视化控件里的那个Timer实际是System.Windows.Forms.Timer,直接使用时差不多只能实现精确到秒的计时——Interval设置小于17就会出现明显误差(慢好多= =)。我很喜欢看秒表上毫秒飞跑,又想精确计时……所以我也就自作孽不可活地上网开始找C#精确计时的解决方案。源地址忘保存了……不过源程序做点有点花哨……我依葫芦画瓢把其中精确计时的部分移植到了一个空工程上,顺利跑起来后再移植到Digital Void上的,简单地说,它多建了一个”项目“,也就是拿出一个线程来辅佐计时,首先在主项目(Form)上定义一些变量:
timer.Interval = 1;在timer_Tick事件里的相关代码则是:
另一方面,另外添加的ConsoleTimer项目是一个控制台项目,里面Program.cs里的主函数是:
}
基本源码就是这样,整体上应该是利用了线程睡眠以及系统时间来实现精确计时的。更进一步我也不是很懂,所以贴上来供有兴趣的朋友讨论~~
运动模拟部分,基本就是积分数值解的原理,在DEBUG掉我的几个脑残手误后,基本有个样子了,不过不知是积分步长太长还是数据类型精度不够(一直用的是float),本来设计的一个稳定双星,结果轨道还是发散了,以后优化的时候再看情况吧,不行就全改成double……Orz
先上几个图好了:


(后加,我后来把积分步长缩小到了千分之一,发散问题已经明显好转了~)
显示轨迹的功能将会在链接上数据库后加上~~
总之整个计划还是比较顺利的,清明节再加把油,之后就不能像现在空闲时间全拿来码代码了……还得准备英语和考研呐Orz
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
