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.

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

share|improve this question
    
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)). –  J. M. Oct 20 '11 at 4:24
    
One thing is generally agreed upon for two-argument arctangent: the angles (in radians) returned are within the interval $(-\pi,\pi]$. –  J. M. Oct 20 '11 at 4:25
    
Hey, yes using java and it wants atan(y,x). Question though - are there any special cases I need to worry about for input? Like if x or y equal zero? A return value in [−π,π] is fine I think - it'll just convert to +180 / -180, right? My rendering framework can handle that ok. Thanks! –  wwww Oct 20 '11 at 4:28
    
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. –  J. M. Oct 20 '11 at 4:30
1  
@wwww: What I don't understand: Why did you go to all the trouble of writing down this question and creating those ASCII diagrams when you already knew about the atan2 function and could have just tried it out to check whether it does what you want? –  joriki Oct 20 '11 at 6:52
show 3 more comments

1 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

share|improve this answer
add comment

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.