2011-09-18 23 views
3

对于两个圆直线移动,它很容易计算出发生碰撞的时间:http://twobitcoder.blogspot.com/2010/04/circle-collision-detection.html测距点(动圈+时间)

这假定界有固定的出发点和固定移动路径,并计算碰撞时间。

是否有可能做到这一点周围的其他方法:

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

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

I.E. 圆圈1从0,0开始并以1.0的速度移动(每次向右移动1个单位) 圆圈2从5.5开始并且每次移动1个单位 碰撞位置是什么(或VX2 ,VY2圆圈2需要移入)以便两个圆在最低时间T碰撞。 两个圆的半径为1

在此示例中,解决方案将位于圆1周围的某处在时间3,0。这个问题相当复杂,因为你有未知的变量:碰撞点,碰撞时间,VX2,VY2。尽管VX2和VY2受到| VX1 | + | VX2 |的限制= 1

的原因的问题就是要告诉圈2,它应该以移动到为“捕获”圆圈1

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

回答

3

有解决这个简单的两个键:

  • 首先,点reac从x2及时t形成一个以x2为中心的圆圈。
  • 其次,圈子可以触摸他们的第一时刻必须触及切线。

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

如果我们绘制出这个图,我们得到t中的一个二次方程:

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

可以很容易得到解决代替t。

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

+0

迈克尔,请你说明哪些变量是二次方程的'a','b'和'c'?我假设'x'是我们正在努力解决的问题。谢谢! –

+1

我已经在PDF格式https://sites.google.com/site/therobotsbrain/files/circle_intersection_time中提供了更清晰的说明。pdf希望这会让事情更清楚(在堆栈溢出写数学不容易..) –

+0

谢谢。非常感激 –