I'm trying to figure out how to calculate the following angle:

I know center (p1) and radius (r) of a circle. Given a point p3 I want to calculate the angle a such as the tangent (tan) of the circle at point p4, points in p3 direction.

Here's a figure:

enter image description here

Doesn anyone know how to do that?


Let b be the angle between vectors p1p2 and p1p3. Its value can be computed as:

b = pi - atan2(p1p3.y, p1p3.x)

The angle between p1p4 and p1p3 is b-a. Since p1p3p4 is a right-angled triangle, we know that cos(b-a) is the distance p1p4 divided by the distance p1p3.

The answer is then:

a = pi - atan2(p1p3.y, p1p3.x) - acos(r / length(p1p3))

Replacing the second - with + will give you the second possible solution.

| improve this answer | |
  • \$\begingroup\$ Thank you very much. I google a lot searching answer to this, but I didn't find anything. Simple and clear solution!! \$\endgroup\$ – Heisenbug Sep 9 '12 at 19:57

I was going to calculate this, then I failed, then I googled, then I found people who failed multiple times as well. But in the end some seem to have gotten it right :).

Read this entire thread, it should lead you to the correct algorithm.

| improve this answer | |
  • \$\begingroup\$ Why was this downvoted? Doesn't the link have the exact answer? Btw the search query was "tangent circle point". \$\endgroup\$ – Roy T. Sep 9 '12 at 20:05
  • 2
    \$\begingroup\$ See: meta.stackexchange.com/questions/8231/… \$\endgroup\$ – Eric Sep 9 '12 at 20:13
  • \$\begingroup\$ Hah didn't know that. You are absolutely right, I even agree after reading that topic. Well I guess I never did this before :P. \$\endgroup\$ – Roy T. Sep 9 '12 at 20:15
  • \$\begingroup\$ Note that the thread in question seems to indicate that there are four possible answers. There must be something wrong there. \$\endgroup\$ – sam hocevar Sep 10 '12 at 0:43
  • \$\begingroup\$ No there are 2 possible lines, but four possible vectors describing that line, hence the four solutions. \$\endgroup\$ – Roy T. Sep 10 '12 at 6:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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