物理数据类型

Posted

技术标签:

【中文标题】物理数据类型【英文标题】:Datatypes for physics 【发布时间】:2010-09-06 22:22:57 【问题描述】:

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

在 c# 中我可以用来表示位置(没有离散跳跃的感觉)的最准确的数据类型是什么?

另外,在 t 和 t+1 之间我能得到的最短时间是多少?一滴滴?

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

【问题讨论】:

【参考方案1】:

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

public class Position

    decimal x;
    decimal y;
    decimal z;

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

听起来是个有趣的项目!祝你好运!

【讨论】:

-1:小数很少用于任何 3D 游戏计算,它们太慢了。使用由 3 个浮点数构建的 Vector 类,一切就绪。 +1:对于实数类型,十进制是最精确的,这就是所要求的。【参考方案2】:

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

这通常会提供足够多的精度,除非您需要在同一个“世界”中混合巨大尺度(行星)和微观层面(篮球)。

不使用小数的原因可能是大小(大 4 倍)、速度(慢几个数量级)和没有可用的三角函数 (AFAIK)。

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

【讨论】:

+1:用 3 个浮点数构建的向量在 D3D 中是相当标准的。除非您需要更高的准确性,否则我不会使用小数,但如果它只是一个游戏,我不会担心。【参考方案3】:

除非您从事火箭科学,否则小数太夸张了。尽管它可能会为您提供更精确的位置,但不一定会为您提供更精确的(例如)速度,因为它是定点数据类型,因此限制在比浮点数或双精度数小得多的范围内。

使用浮点数,但如果精度出现问题,请保持门打开以向上移动双倍。

【讨论】:

【参考方案4】:

我会使用 Vector 数据类型。就像在物理学中一样,当您想对物体运动进行建模时,您可以使用向量。使用Vector2 或Vector3 class out of the XNA 框架或滚动您的own Vector3 struct 来代表位置。 Vector2 用于 2D,Vector3 用于 3D。

TimeSpan 结构或Stopwatch 类将是您计算时间变化的最佳选择。如果我必须推荐,我会使用秒表。

【讨论】:

【参考方案5】:

我认为您应该能够毫无问题地使用 Decimal 数据类型。它具有最高精度。不过,双精度数据类型应该没问题。

是的,我所知道的最小刻度是(使用 System.Diagnostics.Stopwatch 类)。

【讨论】:

【参考方案6】:

我不确定我是否理解您的最后一个问题,请您澄清一下吗?

编辑:

我可能仍然不明白,但你可以使用任何你想要的类型(例如,双精度数)来表示时间(如果你真正想要的是表示物理问题的时间离散化,在这种情况下,勾号是无关)。对于大多数物理问题,双打就足够了。

刻度是使用机器测量时间时可以达到的最佳精度。

【讨论】:

【参考方案7】:

对于模拟,您最好在无量纲时间内使用小数/双精度(与位置相同的类型),然后将其从/转换为对输入/输出有意义的东西。否则,当您四处移动时,您将执行大量的演员操作。您也可以通过这种方式获得任意精度,因为您可以根据需要选择大/小时间刻度。

【讨论】:

【参考方案8】:

Hey Juan,我建议您使用其他几个人建议的 Vector3 类,因为它易于使用,最重要的是 - 支持您需要的所有操作(如加法、乘法、矩阵乘法等...),无需需要自己实现。 如果您对如何进行有任何疑问 - 继承它,然后您可以随时更改内部实现,或断开与 vector3 的连接。

另外,不要使用比浮点数更准确的东西——如今所有处理器的运行速度都足够快,比整数更准确(除非它是为移动设备设计的,但即使在那里......) 使用小于浮点数会很快失去精度,最终会出现跳跃的旋转和平移,特别是如果您计划使用多个矩阵/四元数乘法。

【讨论】:

以上是关于物理数据类型的主要内容,如果未能解决你的问题,请参考以下文章

唯一列的最佳索引类型,如果对数据进行物理排序,查询将更快

计算机网络:物理层

U盘的常见物理故障类型和故障表现汇总

SQLServer文件类型

如何使用PowerDesigner创建物理数据模型

如何使用PowerDesigner创建物理数据模型