Floating point 将Bullet3D用于2D是否只会导致Z轴出现浮点数字错误?

Floating point 将Bullet3D用于2D是否只会导致Z轴出现浮点数字错误?,floating-point,2d,bulletphysics,Floating Point,2d,Bulletphysics,我想在仅2D模式下使用bullet3D是可能的,但我关心的是浮点精度误差。如果Z轴的所有值和操作均为0,则Z值可能会受到其他轴操作的影响。如果这种情况累积起来,结果可能是错误的 但是我还没有使用bullet3d。如果您在仅二维模式下使用bullet3d,请告诉我您的意见 我不知道Bullet的具体情况,但假设它是一个写得相当好的库,这将不是一个问题 浮点运算不是神秘主义。舍入误差不会神奇地发生,舍入也不是随机的、模糊的,或者人们用来描述他们不理解的现象的任何其他术语 浮点运算是确定性的,就像计算

我想在仅2D模式下使用bullet3D是可能的,但我关心的是浮点精度误差。如果Z轴的所有值和操作均为0,则Z值可能会受到其他轴操作的影响。如果这种情况累积起来,结果可能是错误的


但是我还没有使用bullet3d。如果您在仅二维模式下使用bullet3d,请告诉我您的意见

我不知道Bullet的具体情况,但假设它是一个写得相当好的库,这将不是一个问题

浮点运算不是神秘主义。舍入误差不会神奇地发生,舍入也不是随机的、模糊的,或者人们用来描述他们不理解的现象的任何其他术语

浮点运算是确定性的,就像计算机上的其他一切一样(除非宇宙射线随机翻转位)。用精确的零进行计算,只要公式正确,就会产生精确的零结果。如果影响Z轴的所有操作均为零,则生成的Z坐标将精确为零。如果不是,那么所使用的算法是不合适的,我不会相信它用于任何计算


你会遇到麻烦的地方是,如果你用非零Z分量求和,这些分量在物理上应该和为零;在这种情况下,舍入误差可能累积,导致较小但非零的Z分量。然而,这听起来不像是你发现自己的情况。听起来所有涉及的量都应该有零Z分量,这将被保留。

我现在正在使用子弹物理进行2D游戏,效果很好。Bullet提供了一种方法btRigidBody::setLinearFactor,允许您强制Z轴位置精确为0,无论发生什么情况。通过仅在要约束到平面的对象上设置线性因子,甚至可以混合二维和三维


也就是说,我使用了一个具有一些Z轴深度的形状(只是它的位置被约束为2D),所以它的厚度不是0。即使如此,因为它很薄,我偶尔也会遇到它在网格中滑动的问题。您可以使用setMargin来解决这个问题。

谢谢您的明确解释!我会考虑Z值可能不为零的情况。