3

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

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

是否可以反过来做:

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

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

IE Circle 1 从 0,0 开始,以 1,0 的速度移动(每次向右移动 1 个单位) Circle 2 从 5,5 开始,每次可以移动 1 个单位 碰撞位置是什么(或 VX2,VY2圆 2 需要移入),以便 2 个圆在最低时间 T 发生碰撞。两个圆的半径均为 1

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

这个问题的原因是告诉圈子 2 它应该移动到哪里才能“抓住”圈子 1。

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

4

1 回答 1

3

简单地解决这个问题有两个关键:

  • 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)

于 2011-09-19T01:51:31.703 回答