How to find closest points between two moving circles?

Started by
8 comments, last by pizza123 11 years, 3 months ago

Hi,

I'm trying to find the time of impact between two moving circles. Right now I was finding the closest distance between the circles (like if you just draw a line between their centres), however if the two circles are moving then the actual closest points (& distance) for impact are different. I was wondering what would be the easiest way to find those points?

Thank you

Advertisement

Use coordinates where one of the circles is not moving. If the circles were moving in straight lines, now you'll see only one circle moving in a straight line. Finding the shortest distance between a segment and a point is easy enough.

Does that help?

Thank you for the reply, but I don't quite understand what you mean by using coordinates where one of the circle is not moving? Like find relative velocity or relative position? And for finding the shortest distance between a segment and a point, what would be the segment and what would be the point?

Yes, you can think of what I am saying as using relative velocity and position. The segment is the path of the center of the circle that moves and the point is the path of the center of the circle that doesn't move.

Thank you for the reply, but I don't quite understand what you mean by using coordinates where one of the circle is not moving? Like find relative velocity or relative position? And for finding the shortest distance between a segment and a point, what would be the segment and what would be the point?

If you subtract the velocity of sphere 1 (s1) from both sphere 1 and sphere 2 (s2), now you have a single non-moving sphere (s1) and a moving one (s2). Now the problem is much easier, because you can just determine the closest approach of s2 to the center of s1. Then you can compare that distance to the combined radius (D_min = s1.radius + s2.radius). If the distance is less than D_min, then a collision will occur. After that you have to calculate where it occurred.

Anyway, I dont have time to go through the math of how to do all this, just saying why you want to simplify the problem by making one non-moving.

Given two circles c1 and c2 with velocity vectors v1 and v2, it would seem as though what you need to do really is calculate intersection points between two pairs of lines.

This would be my mindset in solving this:

[attachment=13114:circlecollide.gif]

I'm not the best at math so I'm taking a shot in the dark without verifying this. But I'd probably do something to this effect for each circle:

1. normalize v1

2. find the perpendicular of v1, let's call it perp_v1

If we move away from the center of c1 distance +/- r (radius) we actually have two points still on circle c1. Something like.. c1.location + perp_v1 * radius

You can just use those two points and the normalized v1 to create the two lines shown in red for each circle. Then it's just a matter of finding the points where the equations for those lines are equal. There should be four total (circled in blue). The first intersection point on a circle edge is going to end up being the one closest to both c1 and c2. Hopefully someone can expand on this.. I'm up later than I should be and my brain in shutting down. =P

Hope this gets things moving a little more.

[quote name='Michael Tanczos' timestamp='1357539864' post='5018474']
Given two circles c1 and c2 with velocity vectors v1 and v2, it would seem as though what you need to do really is calculate intersection points between two pairs of lines.
[/quote]

I don't think that solves anything. The two circles might get to the intersection region at different times, and then they won't collide.

Find the distance between the circle centres as a function of time. Solve for it being equal to the sum of the radii (it's a quadratic).

The quadratic will have no roots if the circles do not collide, otherwise two roots and you want the smallest, if they are both positive.

Given two circles c1 and c2 with velocity vectors v1 and v2, it would seem as though what you need to do really is calculate intersection points between two pairs of lines.

I don't think that solves anything. The two circles might get to the intersection region at different times, and then they won't collide.

1AM me says my solution makes perfect sense - 7AM me says 1AM me should have went to bed.

Thanks for the replies, I did it the quadratic way and it worked, but I might try the other ways later.

This topic is closed to new replies.

Advertisement