2012-07-06 164 views
7

我知道如何检查两个圆是否相互交叉。但是,有时圆圈移动得太快,最终会避免下一帧发生碰撞。圆圈碰撞预测

我目前的解决方案是检查前一个位置与当前位置之间的任意次数的圆圈碰撞。

有没有一种数学方法来找出两个圆圈碰撞所需的时间?如果我能够获得时间价值,那么我可以在当时将圈子移动到位置,然后在那一点碰撞它们。

编辑:等速

+3

这有点含糊。你的圈子的运动模式是什么?恒定速度 – mathematician1975 2012-07-06 21:06:09

+0

等速,是的。对不起,我不是100%如何提出这个问题。我搜索了很多结果只是为了提醒自己,我并不是物理学最好的。 – Bojo 2012-07-06 21:10:36

+0

是的,有一种方法。是的,我相信这是一个简单的计算。但是,我不知道它是什么:(我知道这是非常基本的微积分,但是, – 2012-07-06 21:15:37

回答

11

我假设圆的运动是线性的。假设圆A的中心的位置由矢量方程Ca = Oa + t*Da其中

Ca = (Cax, Cay)是当前位置
Oa = (Oax, Oay)给出是起始位置
t是经过时间
Da = (Dax, Day)是每单位时间的位移(速度)。

同样适用于B圈的中心:Cb = Ob + t*Db

然后你想找到t,使得||Ca - Cb|| = (ra + rb)其中rarb分别是圈A和圈B的半径。

现蕾双方:
||Ca-Cb||^2 = (ra+rb)^2
和扩大:
(Oax + t*Dax - Obx - t*Dbx)^2 + (Oay + t*Day - Oby - t*Dby)^2 = (ra + rb)^2

从,你应该得到你可以解决T(如果这样的T存在)二次多项式。

+0

非常感谢你!像魅力一样工作。 – Bojo 2012-07-06 22:36:29

+0

这是一个伟大的等式..但不幸的是我的代数是生锈的。如何重新排列该方程来一举解决T? – 2016-06-17 18:10:38

+1

@MattKenefick参见[这里](https://www.wolframalpha.com/input/?i=solve+%28O_1+%2B+t*D_1+-+O_2+-+t*D_2%29%5E2+%2B+%28O_3+%2B + T * D_3 + - + O_4 + - + T * D_4%29%5E2 +%3D +%28r_1 +%2B + R_2%29%5E2 +为+ T)。 – 2016-06-18 02:19:18

-2

可以预测使用方向向量和速​​度的碰撞,这给你的下一个步骤,而当他们将一个碰撞(是否会有)。

你只需要检查线路交叉算法来检测......

+0

嗯,我的位置,速度和方向都可以访问用于我需要的任何算法。我已经可以很好地检测到循环碰撞。只是我的项目每1/60秒更新一次。 – Bojo 2012-07-06 21:24:53