2016-01-09 107 views
-1

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

enter image description here

+2

你的问题有点不清楚。你想检查他们是否正在碰撞*现在*或他们*将来会碰撞一段时间*? *过去*有时会碰撞*,你想检查一下吗? –

+0

我想知道如果从途中,从他们的开始到他们的终点。在他们到达目的地之前,他们可能会冒险。 – Montezuma

+0

您是否检查过[this one]这样的现有解决方案(http://ericleong.me/research/circle-circle/)? –

回答

3

让我们P1 = (x1, y1)P2 = (x2, y2)开始坐标,V1 = (vx1, vy1)V2 = (vx2, vy2)是速度,R1R2是圆的Radia。 圈发生碰撞,如果中心距小于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. 模拟运动 - “移动”超前的机器人用于从它们的速度和仿真时间间隔(短)计算出的距离,然后确定它们是否足够接近可能发生碰撞。重复,直到它们碰撞或到达目的地。
  2. 您可以使用两条线代表机器人的边缘,而不是使用代表机器人/圆的中点的单条线。

祝你好运。

-2

有一个简单的方法来检查圆圈是否碰撞;如果两圆之间的距离小于两者的半径之和,则意味着它们正在碰撞。

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

+0

OP想知道他们是否在途中相撞,不仅*现在正在碰撞*。 –

+0

@SimonForsbergMcFeely固定。 – Gustavo6046