Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Alright, I am programming a plugin for a game that requires me to get the closest point on a circle when all you have is a point B, which is outside of the circle, the radius of the circle, and the location of the center of the circle.

Say I have this situation: diagram

So, how would I be able to get the coordinates of point C? I need a formula that allows me to calculate those coordinates when I only know the radius of the circle and the coordinates of B. I sketched the line for ease of understanding, but all I start with is just the circle and point B. OH, one other thing, B isn't a static point, each time this calculation will be executed B will be at another position.

And, as a bonus (not really needed) would you care to show an example on how to do the same thing, but then when point B is inside the circle.

Thanks in advance!

share|improve this question
    
That is useful to me too. But what if instead of a circle, it is an ellipse? –  user31689 May 18 '12 at 16:55
    
You should post this as a separate question, so that people can post answers to it using the answer box. I think you are going to have to solve a system of 2 quadratic equations: one is your equation of the ellipse $ax^2+by^2=1$, the other is $by(x-p)-ax(y-q)=0$ where $(p,q)$ is the point outside of ellipse. The second equation expresses the orthogonality of the vector $\langle x-p,y-q \rangle$ to the ellipse. The case of the circle is much easier because when $a=b$, the second equation is linear. –  user31373 May 18 '12 at 17:09
    
This can be "reduced" to solving a quartic equation. Note that there can be two local minima and two local maxima. –  Robert Israel May 18 '12 at 17:16
    
Note The two prior comments (of LK and RI) apply to Brad's comment (which was migrated from an answer). –  Bill Dubuque May 18 '12 at 17:30

1 Answer 1

$$ \vec C = \vec A + r\frac{(\vec B - \vec A)}{||\vec B - \vec A||} $$ Where $r$ is the radius of the circle. Works for points both inside and outside the circle. Imagine $(\vec B - \vec A)$ to be a vector in the direction of $\vec B$ and $\frac{(\vec B - \vec A)}{||\vec B - \vec A||}$ thus is the same vector but with a length of $1$. By multiplying it with $r$, you "walk in that direction" a total distance of $r$, thus reaching the circle.

With coordinats $\vec A = (A_x, A_y)$ etc. this reads $$ C_x = A_x + r\frac{B_x-A_x}{\sqrt{(B_x-A_x)^2+(B_y-A_y)^2}} $$ $$ C_y = A_y + r\frac{B_y-A_y}{\sqrt{(B_x-A_x)^2+(B_y-A_y)^2}} $$

share|improve this answer
    
Thank you very much for your answer. Just how do I make it so that I can get the coordinates of C with this? I know I need to adjust the formula but I really fail at doing that. Thanks! –  Quincy Bakker Apr 3 '12 at 13:56
    
@Quincy: This will get you the point on the circle. I assumed that is what you wanted? (using the letters $A$, $B$ and $C$ as they appear in your plot) –  example Apr 3 '12 at 14:03
    
Ehm, I'm confused, the formula you posted says B=, I could be wrong but doesn't that mean that it simply outputs B? I need C, the intersection of the line AB with the edge of the circle. So point C is completely unknown. If I am asking something really stupid I'm sorry but we're just starting on this subject on school, and currently we are only doing the unity circle so yeah :). Thanks again! –  Quincy Bakker Apr 3 '12 at 14:07
    
@Quincy: Don't worry, no question is every stupid ;) The fault is on my part. The formula is correct, but I used $\vec A$ as the center of the circle, $\vec C$ as the point outside and $\vec B$ as the point on the circle. Will change it to use your names for the points. –  example Apr 3 '12 at 14:12
    
Ah thank you very much! I'll try the formula now and report back if it works! –  Quincy Bakker Apr 3 '12 at 14:14

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.