【问题标题】:How to fix circles overlap in collision response?如何修复碰撞响应中的圆圈重叠?
【发布时间】:2013-09-12 01:17:01
【问题描述】:

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

在完美碰撞不重叠的情况下如何放回球?

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

简而言之,我必须为 t 求解这个方程:

地点:

  • 是一个回答问题的数字:多少帧前 碰撞是否完美发生?
  • 是第一个球的中心
  • 是第二个球的中心
  • 和 是它们的速度。

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

【问题讨论】:

  • 如果我理解正确,你想找到圆圈只有一个共同点的位置吗?找到一条连接圆心的线,然后移动其中一个圆,使它们的圆心之间的距离等于它们的半径之和?
  • 是的,您理解正确,但是您的解决方案(我已经知道并且我现在正在使用)是错误的,因为连接中心的线的方向与速度的方向不同(尤其是如果球与另一个球非常相交)。

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


【解决方案1】:

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

此外,如果您想让事情变得简单,请使用矢量数学来完成。这里没有理由分开 x 和 y 坐标。只需要矢量加法和点积即可。

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

【讨论】:

  • 你能解释一下向量数学是如何做到的吗?
  • 当然——第一个球的位置是X1,第二个球的位置是X2,速度分别是V1和V2。 (这些都是二维变量)。取 X=X2-X1,V=V2-V1。然后你有 (X+tV) 点 (X+tV) = r^2.
  • 谢谢你,我会试试你的解决方案! r 是半径之和?
  • 是的。 (yepyepyep 字符限制)。
  • 我意识到这与使用单独的 x 和 y 是一回事,但现在我遇到了同样的问题:如何从向量方程中提取 t?
猜你喜欢
  • 2013-09-13
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多