当前位置:  开发笔记 > 编程语言 > 正文

物理数据类型

如何解决《物理数据类型》经验,为你挑选了3个好方法。

我目前正在设计一个涉及一些物理学的程序(没什么太奇特,几个球相互碰撞)

在c#中,我可以使用哪种最精确的数据类型来表示位置(没有离散跳跃的感觉)?

另外,在t和t + 1之间我可以得到的最小时间是多少?一蜱?

编辑:澄清:C#中最小的时间单位是多少?[TimeSpan].Tick



1> tghw..:

在.Net中,a decimal将是您可以用于位置的最精确的数据类型.我只想为这个职位写一堂课:

public class Position
{
    decimal x;
    decimal y;
    decimal z;
}

至于时间,你的处理器不能给你任何小于一个滴答的东西.

听起来像一个有趣的项目!祝好运!



2> Bjorn Reppen..:

Decimal数据类型虽然精确,但可能不是最佳选择,具体取决于您要执行的操作.通常,Direct3D和GPU使用32位浮点数,以及3(总共96位)的向量来表示x,y,z中的位置.

除非你需要在同一个"世界"中混合大尺度(行星)和微观水平(篮球),否则这通常会提供足够的精度.

不使用小数的原因可能是尺寸(大4倍),速度(数量级更慢)和没有三角函数(AFAIK).

在Windows上,QueryPerformanceCounter API函数将为您提供最高分辨率的时钟,而QueryPerformanceFrequency将为您提供 计数器的频率.我相信其他评论中描述的秒表将其包含在.net类中.



3> 小智..:

除非你正在做火箭科学,否则小数就是WAAAY矫枉过正.虽然它可能会给你更精确的位置,但它不一定会给你更精确的(例如)速度,因为它是一个定点数据类型,因此限制在比float或double小得多的范围内.

使用浮子,但保持门打开以向上移动到双打,以防精度变成一个问题.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有