我知道如何检查两个圆圈是否相交。但是,有时圆圈移动得太快,最终避免在下一帧上发生碰撞。
我目前对该问题的解决方案是检查前一位置与其当前位置之间的任意次数的圆-圆碰撞。
有没有一种数学方法可以找到两个圆碰撞所需的时间?如果能够获得该时间值,则可以将圆移动到当时的位置,然后在该点碰撞它们。
编辑:恒定速度
我假设圆的运动是线性的。比方说,一个圆的中心的位置由矢量方程给出Ca = Oa + t*Da其中
Ca = Oa + t*Da
Ca = (Cax, Cay)是当前位置, Oa = (Oax, Oay)是起始位置, t是经过时间, Da = (Dax, Day)是每单位时间的位移(速度)。
Ca = (Cax, Cay)
Oa = (Oax, Oay)
t
Da = (Dax, Day)
同样对于B圈的中心:Cb = Ob + t*Db。
Cb = Ob + t*Db
然后,您想要找到t,使得||Ca - Cb|| = (ra + rb)其中ra和rb分别是圆A和B的半径。
||Ca - Cb|| = (ra + rb)
ra
rb
平方双方: ||Ca-Cb||^2 = (ra+rb)^2 并扩大: (Oax + t*Dax - Obx - t*Dbx)^2 + (Oay + t*Day - Oby - t*Dby)^2 = (ra + rb)^2
||Ca-Cb||^2 = (ra+rb)^2
(Oax + t*Dax - Obx - t*Dbx)^2 + (Oay + t*Day - Oby - t*Dby)^2 = (ra + rb)^2
由此,您应该得到一个可以求解t的二次多项式(如果存在的话)。