测试与浮点对齐

时间:2017-07-27 22:03:42

标签: c++ floating-point floating-accuracy dot-product

这是针对物理引擎的:

当物体在斜坡上碰撞时,其速度将相应调整为与所述斜坡平行。

为了检查一个物体是朝向还是远离斜坡移动,我在斜率的法线和物体的速度之间使用了一个点积。

由浮点数学引起的问题。有时,物体的速度与斜率平行,但不完全平行,导致它被检测为碰撞。

在大多数情况下,这是不正确的,因为速度将不断重新调整为并行,再次检查并再次检测。

有没有办法避免这种行为而不必存储额外的变量?

(我可以轻松添加斜率的副本以检查它最近被击中,但这会导致对每个对象进行更多检查)

1 个答案:

答案 0 :(得分:0)

您可以设置与导致碰撞检测检查的斜率的最小偏差。即如果斜坡非常相似,则不要检查是否有碰撞。例如偏差小于0.01°应视为平行。