寻找碰撞点(移动圈+时间)

时间:2011-09-18 11:10:52

标签: math game-physics mathematical-optimization continuous

对于两个线性移动的圆,很容易计算碰撞时间:http://twobitcoder.blogspot.com/2010/04/circle-collision-detection.html

这假设圆圈具有固定的起点和固定的移动路径,并计算碰撞的时间。

是否有可能以相反的方式做到:

圆圈1:起点X1,Y1速度VX1,VY1(固定起点,固定直线运动路径),半径R1 圆圈2:起点X2,Y2速度标量(1m / sec等)(固定起点,固定速度,未知方向),半径R2

是否可以确定两个圆圈在最短行程时间内的碰撞位置?

即。 圆圈1从0,0开始并以速度1,0移动(每次向右移动1个单位) 圆圈2从5,5开始,每次可以移动1个单位 碰撞位置是什么(或者VX2,VY2圈2需要移入)以使2个圆圈在最低时间T碰撞。 两个圆的半径是1

在这个例子中,解决方案将在Circle 1周围的某个位置在时间3处的点3,0。问题感觉相当复杂,因为您有未知变量:碰撞点,碰撞时间,VX2,VY2。虽然VX2和VY2会被| VX1 | + | VX2 |约束= 1。

问题的原因是告诉第2圈它应该移动到哪里以“捕捉”第1圈。

蛮力解决方案是在每个时间间隔检查圆圈1的位置,并计算如果被告知移动到该点,圆圈2是否会与圆圈1碰撞 - 但是你可能会错过圆圈的碰撞点移动快速,或获得次优点等。

1 个答案:

答案 0 :(得分:3)

解决这个问题有两个关键:

  • 首先,x2及时t到达的点可形成以x2为中心的圆圈。
  • 其次,圆圈可以碰到的第一刻,它们必须切向接触。

这些结合起来告诉我们,点x2(0)x2(T),接触点和x1(T)都是共线点。

如果我们绘制一个显示此图的图表,我们在t中得到一个二次方程式:

|| x2(0) - x1(0) - v1 t ||^2 = (r1+r2+t)^2

这很容易解决。

要获得v2的方向,我们只需要在x1(T)-x2(0)方向使用单位向量。