Jump to content

  • Log In with Google      Sign In   
  • Create Account


How to find closest points between two moving circles?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
9 replies to this topic

#1 pizza123   Members   -  Reputation: 107

Like
0Likes
Like

Posted 06 January 2013 - 08:23 PM

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



Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 12997

Like
0Likes
Like

Posted 06 January 2013 - 08:59 PM

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, 06 January 2013 - 11:34 PM.


#3 pizza123   Members   -  Reputation: 107

Like
0Likes
Like

Posted 06 January 2013 - 09:41 PM

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? 



#4 Álvaro   Crossbones+   -  Reputation: 12997

Like
0Likes
Like

Posted 06 January 2013 - 10:07 PM

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.



#5 0r0d   Members   -  Reputation: 817

Like
0Likes
Like

Posted 06 January 2013 - 10:55 PM

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.



#6 Michael Tanczos   Senior Staff   -  Reputation: 5191

Like
0Likes
Like

Posted 07 January 2013 - 12:24 AM

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:

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, 07 January 2013 - 12:27 AM.


#7 Álvaro   Crossbones+   -  Reputation: 12997

Like
0Likes
Like

Posted 07 January 2013 - 01:44 AM

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.



#8 EWClay   Members   -  Reputation: 659

Like
0Likes
Like

Posted 07 January 2013 - 04:13 AM

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.

#9 Michael Tanczos   Senior Staff   -  Reputation: 5191

Like
0Likes
Like

Posted 07 January 2013 - 06:36 AM

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, 07 January 2013 - 06:42 AM.


#10 pizza123   Members   -  Reputation: 107

Like
0Likes
Like

Posted 07 January 2013 - 07:00 PM

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






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS