在谨慎的时间里,我有2个球,其位置由数值方法确定。
碰撞测试只是(d
我知道当前时间步中球的位置和速度
如果时间步长是小的enoguh,我可以使用线性近似来获得先前的位置并使用它来获得碰撞点,这样我就可以给它一个适当的碰撞响应
当碰撞时间(d = r1 + r2)满足时,扩展此等式,我们得到
(P1-tV1) - (P2-tV2)= N(r1 + r2),P是球的中心位置,V是速度,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小于步长
但这是一个非常复杂的解决方案,有没有更简单的方法来解决这个问题?
答案 0 :(得分:1)
如果在每个时间步长没有对球体施加加速度,这在时间步长很小的情况下是合理的,那么例如:如果在t_start处d = r1 + r2 + A,在t_end处d = r1 + r2-B,通过时间步长发生碰撞A /(B + A)。
然后可以根据速度矢量V1和V2轻松计算该碰撞的坐标。