【问题标题】:finding collision point of impact between spheres找到球体之间的碰撞点
【发布时间】:2013-01-24 18:59:21
【问题描述】:

在谨慎的时间里,我有 2 个球,它们的位置是通过数值方法确定的。

测试碰撞只是 (d 确定碰撞的时间,这样我就可以获得碰撞发生时的法线向量并应用适当的碰撞响应

如果它只有 2 个点会很容易,但球有半径。我必须及时线性插值以找到它们碰撞的确切时间。

我知道球在当前时间步的位置和速度

如果时间步长很小,我可以使用线性近似来获取先前的位置并使用它来获取碰撞点,这样我就可以给它一个适当的碰撞响应

碰撞的时间是满足 (d = r1 + r2) 的时候,扩展这个方程,我们得到

(P1 - tV1) - (P2 - tV2) = N (r1 + r2),P's 是球的中心位置,V's 是速度,N 是从球 1 指向球 2 的法向量。

收集项,(P1 - P2) - t (V1 - V2) = N(r1 + r2)

我们可以通过两边的点积来消除 N,但这将很难用所有的正方形和东西来等值。

令 (Px , Py) = P1 - P2,对 V 也一样,然后两边进行点积

我们得到 (Px - tVx)^2 + (Px - tVx)^2 = (r1 + r2)^2,要解出 t,我们需要展开它

Px^2 + Py^2 - t(2Vx + 2Vy) + t^2(Vx^2 + Vy^2) = (r1 + r2)^2

t^2(Vx^2 + Vy^2) - t(2Vx + 2Vy) + (Px^2 + Py^2 - (r1 + r2)^2) = 0

可以用二次求解器求解 at^2 + bt + c = 0,并且我们知道 t 小于步长

但这是一个非常复杂的解决方案,没有更简单的方法来解决这个问题吗?

【问题讨论】:

  • 为什么这么复杂?它通过对每一对计算 O(1) 来解决问题。没有渐近更快的解决方案。
  • 您的问题似乎与编程没有直接关系,因此似乎与 Stack Overflow 无关。关于数学的问题最好在我们的姊妹网站math.stackexchange.com提出。

标签: math collision-detection


【解决方案1】:

如果在每个时间步长上没有对球体施加加速度,如果你的时间步长很小,这是合理的,那么举个例子:如果 t_start 时 d = r1+r2+A,t_end 时 d = r1+r2-B,碰撞发生在 A/(B+A) 整个时间步。

然后可以根据速度矢量 V1 和 V2 轻松计算出这次碰撞的坐标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多