射线碰撞检测缺失

时间:2011-05-16 06:09:15

标签: floating-point collision-detection precision box2d

我正在编写自己的Ray Cast碰撞探测器,时不时地,就像一百万次(最终频繁)。由于圆角误差,我得到了一条光线,它刚刚设法滑过多边形两边之间的间隙。这真的很烦人,我根本不知道如何解决这个问题。不仅如此,Box2D的创建者似乎也有同样的问题:

  

注意

     

由于四舍五入错误,光线投射可以潜入你的多边形之间的小裂缝   静态环境。如果您的申请不能接受,请扩大您的申请   多边形略有。

那么,对于之前实际已经完成此操作的人,我如何确保我从未遇到浮点值的这种类型的舍入点错误?您使用了哪些变通方法,以便此问题不会影响您的程序。

P.S。我已经阅读了大量有关浮点数的内容,但我仍然无法弄清楚如何使百万问题中的问题消失。必须有我遗漏的东西。

1 个答案:

答案 0 :(得分:-1)

这是由于浮点数的近似性质。许多程序员在这种情况下做的是尝试将他们的计算结果与他们期望的测试(或者在你的情况下,评估投射光线和多边形之间的距离)进行比较,然后确定这个差异是否小于某个epsilon值。这是错误的方法。

强烈鼓励您阅读Bruce Dawson关于Comparing Floating Point Numbers的文章。这是您正在寻找的解决方案。

顺便说一下,“稍微放大多边形”相当于使用epsilon值,如果你不能保证你所在世界中所有多边形的大小和位置的域,那么它将不起作用。