嘿,我正在用java编写一个程序(但我认为这与这个问题没有关系),其中两个机器人(圆圈)正在驱动。 机器人以特定速度从某个位置行驶到某个位置。 问题是如何确定圆圈是否有碰撞。 我不能使用圆的中点和它移动的矢量,导致圆具有半径。 另一个问题是我无法检查圈子的最终位置。 我需要检查路上是否发生碰撞以及是否在同一时间。 有没有人知道如何计算?
答案 0 :(得分:3)
我们P1 = (x1, y1)
和P2 = (x2, y2)
是起始坐标,V1 = (vx1, vy1)
和V2 = (vx2, vy2)
是速度,R1
和R2
是圆弧。
如果中心距离小于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)
有一种简单的方法可以检查圆圈是否在碰撞;如果两个圆之间的距离小于两者的半径之和,则表示它们正在发生碰撞。
要检查碰撞是否进入,检查两个圆之间的距离是否小于两者的半径和一个小值的总和,如果在下一个滴答中,该值甚至更小。