两个圆的碰撞

Collision of Two Circles

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

我能想到几个方法:

  1. 模拟运动 - "move" 机器人前进一段距离,根据它们的速度和模拟时间间隔(短)计算,然后确定它们是否足够接近以发生碰撞。重复直到它们碰撞或到达目的地。
  2. 您可以使用两条线代表机器人的边缘,而不是使用一条线代表 robot/circle 的中点。

祝你好运。

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

要检查碰撞是否到来,请检查两个圆之间的距离是否小于两者的半径之和以及一个较小的值,如果在下一个刻度中这个值更小。

P1 = (x1, y1)P2 = (x2, y2)为起始坐标,V1 = (vx1, vy1)V2 = (vx2, vy2)为速度,R1R2为圆半径。 如果 center-center 距离小于 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 求解最后一个二次方程。如果存在适当的(正的,最小的正)根,则此时发生碰撞。