两个圆圈的碰撞

时间:2016-01-09 13:35:30

标签: java geometry collision

嘿,我正在用java编写一个程序(但我认为这与这个问题没有关系),其中两个机器人(圆圈)正在驱动。 机器人以特定速度从某个位置行驶到某个位置。 问题是如何确定圆圈是否有碰撞。 我不能使用圆的中点和它移动的矢量,导致圆具有半径。 另一个问题是我无法检查圈子的最终位置。 我需要检查路上是否发生碰撞以及是否在同一时间。 有没有人知道如何计算?

enter image description here

3 个答案:

答案 0 :(得分:3)

我们P1 = (x1, y1)P2 = (x2, y2)是起始坐标,V1 = (vx1, vy1)V2 = (vx2, vy2)是速度,R1R2是圆弧。 如果中心距离小于R1 + R2(或平方距离小于RR=(R1+R2)^2),则圆圈会发生碰撞

我们可以找到中心坐标,距离与时间的函数,并确定距离是否足够小。

简单的方法 - 使用伽利略的原理,在坐标系中工作,与第一个对象相关联。在该系统中,它保持在零点,第二个对象以起点(x2-x1, y2-y1)和速度(vx2-vx1, vy2-vy1)移动。 第二个对象的时间坐标:

X = (x2-x1) + (vx2-vx1) * t = dx + vx * t
Y = (y2-y1) + (vy2-vy1) * t = dy + vy * t

发生碰撞时,平方距离和RR之间的差值为零

D^2 - RR = X*X + Y*Y - RR = 
dx^2 + 2*dx*vx * t + vx^2 * t^2 + dy^2 + 2*dy*vy * t + vy^2 * t^2 - RR = 
(vx^2+vy^2) * t^2 + 2*(dx*vx+dy*vy) * t + (dx^2+dy^2-RR) = 0

针对t求解最后的二次方程。如果存在正确的(正的,最小的正)根,则此时发生碰撞。

答案 1 :(得分:1)

我可以想到几种方法:

  1. 模拟动作 - "移动"根据速度和模拟时间间隔(短)计算距离前方的机器人,然后确定它们是否足够接近以便碰撞。重复,直到它们碰撞或到达目的地。
  2. 您可以使用两条线代表机器人的边缘,而不是使用表示机器人/圆的中点的单条线。
  3. 祝你好运。

答案 2 :(得分:-2)

有一种简单的方法可以检查圆圈是否在碰撞;如果两个圆之间的距离小于两者的半径之和,则表示它们正在发生碰撞。

要检查碰撞是否进入,检查两个圆之间的距离是否小于两者的半径和一个小值的总和,如果在下一个滴答中,该值甚至更小。