# How to find closest points between two moving circles?

This topic is 1838 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

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

##### Share on other sites

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?

Edited by Álvaro

##### Share on other sites

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?

##### Share on other sites

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.

##### Share on other sites
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.

##### Share on other sites

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.

Edited by Michael Tanczos

##### Share on other sites

[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.

##### Share on other sites
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.

##### Share on other sites

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.

Edited by Michael Tanczos