[Math] Find angle between two points, respective to horizontal axis

trigonometry

I have two points, one is always at the origin (0,0), and the other can be anywhere else in the world. I'd like to find the angle between them, respective to the horizontal axis.

   |     2
   |    /
   |   / 
   |  /  
   | /     
   |/ a  
---1-------------- (horizontal axis)
   |

a = angle (~50 degrees, counter clockwise)

In the above I would construct a right triangle and use sohcahtoa to figure out the missing angle I want, but it gets a bit ugly when the second point is in a different quadrant like in this case:

2    |
\    |
 \   |
  \  |
   \a|a   
    \|a
  ---1--------------
     |
     |

a = angle (~135, counter clockwise)

I just end up with a bunch of different cases depending on what quadrant the second point is in. I'm thinking there must be a much simpler, general solution. This is kind of like trying to find the angle between a point on the edge of a circle and its center, respective to the origin's horizontal axis.

I'm using a C-like language, and it has an atan2() function available. I think these mostly work the same way, would I just feed it the x, y coordinate of my second point and I get back that angle in radians?

Thank you

Best Answer

Yes, two-argument arctangent is intended precisely for your situation. You didn't specify what specific language you have, so: check the docs to see whether it takes the vertical coordinate y first (atan2(y,x)) or the horizontal coordinate x first (atan2(x,y)). One thing is generally agreed upon for two-argument arctangent: the angles (in radians) returned are within the interval (−π,π]

atan2() is also designed to handle the case where one of the coordinates is zero. I haven't checked how atan2(0,0) evaluates in Java, but it's indeterminate (NaN) in some systems and zero in other systems. If you need results in degrees, just perform the usual conversions

Cite: J.M