Farseer(Box2D) - 使用双精度或小数而不是浮点数来增加最大世界大小?

时间:2018-06-13 22:12:11

标签: c# box2d farseer

我使用的是Farseer Physics,它是用C#重写的Box2D的一个分支。

根据我的理解,Farseer / Box2D引擎对世界大小没有严格的限制。在我的理解中,唯一的限制是随着世界尺寸的增加,精度将降低到可见毛刺的程度。目前,Farseer对所有值(例如向量)使用float类型。通过使用更高精度类型(如doubledecimal替换所有浮点数,可以使有效最大世界大小增加吗?交换这些是否有任何有意义的缺点,或者它是一个非常直接的1比1?

1 个答案:

答案 0 :(得分:1)

  

根据我的理解,Farseer / Box2D引擎对世界大小没有严格的限制。在我的理解中,唯一的限制是随着世界尺寸的增加,精度将降低到可见毛刺的程度。

是的。有关此问题的参考,请参阅What units does Box2D use?。或Maximum World Size and Units

  

通过用高精度类型(如double或decimal )替换所有浮点数会使有效最大世界大小增加吗?

为了清晰起见,我添加了斜体文字。

根据我的经验简短回答:排序,是的。

可以在Switching JBox2D (Box2D) from Float to Double precision中找到相关的在线讨论。

请注意,虽然double的maxleast值的大小大于float的最大值和最小值,但仍然存在一些限制,例如部分针对{{{然而,float类型的3}}。

  

交换这些是否有任何有意义的缺点,或者它是一个非常直接的1比1?

以下是我可以预见的一些缺点:

  1. 由于使用double超过float的内存访问量增加,某些计算速度会变慢。
  2. 由于doublefloat相比精度要求提高,因此某些计算速度较慢。
  3. 应用程序的内存占用量&对于所有用于浮动的双打,要求将是两倍大。
  4. 这些设置已部分针对float进行了优化,因此您可能需要调整它们以使用double
  5. 这些是否有意义,将取决于个人情况和用户。我制作了一个使用双打的太阳系演示,以便它所代表的所有内容都可以按比例表示,包括碰撞。不可否认,我使用了Box2D派生物理引擎,但原则上我认为事情也应该能够在Box2D中运行。

    希望这有帮助。