在谨慎的时间里,我有 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 小于步长
但这是一个非常复杂的解决方案,没有更简单的方法来解决这个问题吗?