如何修复碰撞响应中的圆重叠?

时间:2013-09-08 11:33:50

标签: java collision-detection physics collision game-physics

由于在数字世界中几乎不会发生真正的碰撞,我们总会遇到“碰撞”球重叠的情况。

如何在完全碰撞而没有重叠的情况下放回球?

我会用a posteriori方法解决这个问题(二维)。

总之,我必须为t解决这个等式:

((x2 - t * v.x2) - (x1 - t * v.x1))^2 + ((y2 - t * v.y2) - (y1 - t * v.y1))^2 = (r1 + r2)^2

其中:

  • t是一个回答问题的数字:前几帧 碰撞完美了吗?
  • (x1, y1)是第一个球的中心
  • (x2, y2)是第二球的中心
  • (v.x1, v.y1)(v.x2, v.y2)是他们的速度。

但来自WolframAlpha的the solution太复杂了(我更改了速度的名称,但基本上没有改变任何东西)。

1 个答案:

答案 0 :(得分:3)

它看起来很复杂,因为它是完整的解决方案,而不仅仅是简化的多项式形式。将所有内容相乘并收集常数,t和t ^ 2项,你会发现它只是在^ 2 + bt + c = 0.从那里你可以使用二次公式。

另外,如果你想保持简单,可以使用矢量数学。这里没有理由将x和y坐标分开;你需要的是矢量加法和点积。

最后,重要的是相对位置和相对速度。假设一个圆圈位于原点且静止,并将差异应用于另一个球。这并没有改变答案,但它确实减少了你正在争论的变量数量。