Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use atan2() in combination with other Radian angle systems

I am struggling with this in JavaScript, but this problem applies to many other languages/environments as well.

I want to have one object rotating towards the position of another object, and I use:

atan2(obj1.dy, obj1.dx) - obj2.getRotation()

to check if the second object should rotate clockwise or counterclockwise at a given time.

In KineticJS, the JS/HTML5/Canvas programming environment I am using, the angle is specified in radians from 0 to 2 pi starting at the positive Y axis and going clockwise. This behaviour is seen in many other programming environments as well.

However, when calculating the angle of movement from the second object with the Math.atan2(y,x) function, the angle is specified from -pi to pi, starting at the positive X axis, going counterclockwise.

To clarify:

Difference between normal radians and atan2()

The question:

How can I calculate an angle in normal radians from the result of the atan2() function?

like image 330
Qqwy Avatar asked Jul 10 '13 15:07

Qqwy


1 Answers

The values are the same in both cases, modulo 2*PI, and with an adjustment for the different sign and offset convention. Pseudo-code:

theta = 0.5*M_PI - atan2(y, x); // adjust for required sign/offset
theta = fmod(theta, 2.0*M_PI);  // make result modulo 2*PI
like image 123
Paul R Avatar answered Sep 19 '22 18:09

Paul R