对于两个线性移动的圆,很容易计算碰撞时间: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碰撞 - 但是你可能会错过圆圈的碰撞点移动快速,或获得次优点等。
答案 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)
方向使用单位向量。