1

我正在学习基本的碰撞检测。

使用后验(离散)方法进行碰撞检测。假设最简单的情况是 2D 中的 2 个圆,相同的质量,相同的大小,并假设弹性碰撞并假设它们在 x 轴上移动并朝着彼此的方向移动。

现在将模拟推进一个时间步。

现在假设这些圆圈正在发生碰撞,其中一个圆圈进入了另一个圆圈。这是通过检查它们的中心之间的距离是否小于 2*r 来发现的,其中 r 是半径)。

现在根据标准方程调整速度,模拟前进一个时间步长,调整位置。在这种情况下,速度将翻转方向,圆圈将开始彼此远离。

问题是,如果模拟时间步太小或物体移动太慢,这两个圆圈可能会在下一步之前保持碰撞,因为它们还没有完全移出彼此。

因此,在下一个时间步,圆圈再次发生碰撞,再次调整速度,但现在它们会向后翻转,因此圆圈将开始相互移动。

在下一个时间步,再次检测到碰撞,调整速度,圆圈现在将彼此远离。

这个过程重复,圆圈将保持碰撞,无法完全离开彼此。

我确信这是后验方法的一个已知问题。解决这种情况的最佳方法是什么?

4

1 回答 1

0

标准解决方案是在检测到碰撞时将对象分开。计算重叠量并将每个对象从另一个对象移开该距离的一半。如果需要,您甚至可以考虑物体的质量(较重的物体移动较少)。希望这可以帮助。

于 2013-01-07T22:16:16.690 回答