对于两个直线运动的圆,计算碰撞时间是很容易的:http://twobitcoder.blogspot.com/2010/04/circle-collision-detection.html。这假设圆有固定的起点和运动路径,并计算碰撞时间。
那么是否可以反过来做呢?
圆1:起点X1,Y1,速度VX1,VY1(固定起点,固定直线运动路径),半径R1 圆2:起点X2,Y2,速度标量(1m/秒等)(固定起点、固定速度、未知方向),半径R2
是否可以确定两个圆在最短旅行时间内的碰撞位置?
例如: 圆1从0,0开始,以1,0的速度移动(每次向右移动1个单位) 圆2从5,5开始,每次可以移动1个单位 为了让两个圆在最短时间T内相遇,圆2需要移动到什么位置(或者VX2,VY2的值应该是多少)?
在这个例子中,一个解决方案可能是圆1在时间3时位于点3,0附近。这个问题感觉相当复杂,因为你有未知变量:碰撞点、碰撞时间、VX2、VY2。尽管VX2和VY2受到|VX1|+|VX2|=1的限制。
这个问题的原因是要告诉圆2它应该移动到哪里才能“追上”圆1。
暴力解决方案是在每个时间间隔检查圆1的位置,并计算如果圆2被告知移动到该点是否会与圆1相撞,但如果圆移动得很快,你可能会错过圆的碰撞点,或者得到一个次优点等等。
那么是否可以反过来做呢?
圆1:起点X1,Y1,速度VX1,VY1(固定起点,固定直线运动路径),半径R1 圆2:起点X2,Y2,速度标量(1m/秒等)(固定起点、固定速度、未知方向),半径R2
是否可以确定两个圆在最短旅行时间内的碰撞位置?
例如: 圆1从0,0开始,以1,0的速度移动(每次向右移动1个单位) 圆2从5,5开始,每次可以移动1个单位 为了让两个圆在最短时间T内相遇,圆2需要移动到什么位置(或者VX2,VY2的值应该是多少)?
在这个例子中,一个解决方案可能是圆1在时间3时位于点3,0附近。这个问题感觉相当复杂,因为你有未知变量:碰撞点、碰撞时间、VX2、VY2。尽管VX2和VY2受到|VX1|+|VX2|=1的限制。
这个问题的原因是要告诉圆2它应该移动到哪里才能“追上”圆1。
暴力解决方案是在每个时间间隔检查圆1的位置,并计算如果圆2被告知移动到该点是否会与圆1相撞,但如果圆移动得很快,你可能会错过圆的碰撞点,或者得到一个次优点等等。