我目前正在设计一个涉及一些物理学的程序(没什么太奇特,几个球相互碰撞)
在c#中,我可以使用哪种最精确的数据类型来表示位置(没有离散跳跃的感觉)?
另外,在t和t + 1之间我可以得到的最小时间是多少?一蜱?
编辑:澄清:C#中最小的时间单位是多少?[TimeSpan].Tick
?
在.Net中,a decimal
将是您可以用于位置的最精确的数据类型.我只想为这个职位写一堂课:
public class Position { decimal x; decimal y; decimal z; }
至于时间,你的处理器不能给你任何小于一个滴答的东西.
听起来像一个有趣的项目!祝好运!
Decimal数据类型虽然精确,但可能不是最佳选择,具体取决于您要执行的操作.通常,Direct3D和GPU使用32位浮点数,以及3(总共96位)的向量来表示x,y,z中的位置.
除非你需要在同一个"世界"中混合大尺度(行星)和微观水平(篮球),否则这通常会提供足够的精度.
不使用小数的原因可能是尺寸(大4倍),速度(数量级更慢)和没有三角函数(AFAIK).
在Windows上,QueryPerformanceCounter API函数将为您提供最高分辨率的时钟,而QueryPerformanceFrequency将为您提供 计数器的频率.我相信其他评论中描述的秒表将其包含在.net类中.
除非你正在做火箭科学,否则小数就是WAAAY矫枉过正.虽然它可能会给你更精确的位置,但它不一定会给你更精确的(例如)速度,因为它是一个定点数据类型,因此限制在比float或double小得多的范围内.
使用浮子,但保持门打开以向上移动到双打,以防精度变成一个问题.