物理数据类型

jua*_*uan 10 c# types physics

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

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

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

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

tgh*_*ghw 9

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

public class Position
{
    decimal x;
    decimal y;
    decimal z;
}
Run Code Online (Sandbox Code Playgroud)

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

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


Bjo*_*pen 9

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

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

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

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


小智 5

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

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