2

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

测试碰撞只是(d < r1 + r2),这是第一步。第二步是确定碰撞影响的时间,这样我就可以获得碰撞发生时的法线向量并应用适当的碰撞响应< - 这个过程非常耗时,有没有更简单的方法来解决这个问题?像某种近似来简化计算?

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

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

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

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

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

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

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

让 (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 小于步长

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

4

1 回答 1

1

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

然后可以从速度矢量 V1 和 V2 轻松计算出该碰撞的坐标。

于 2013-04-18T13:14:27.787 回答