Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting angle back from a sin/cos conversion

I want to reverse a sin/cos operation to get back an angle, but I can't figure out what I should be doing.

I have used sin and cos on an angle in radians to get the x/y vector as such:

double angle = 90.0 * M_PI / 180.0;  // 90 deg. to rad. double s_x = cos( angle ); double s_y = sin( angle ); 

Given s_x and s_y, is it possible to get back the angle? I thought atan2 was the function to use, but I'm not getting the expected results.

like image 491
Eric Fortier Avatar asked Dec 29 '12 05:12

Eric Fortier


People also ask

How do you get the COS of an angle from the sin?

Generally, for any angle θ, cos θ = sin (90° – θ). cos θ = sin (π/2 – θ).


2 Answers

atan2(s_y, s_x) should give you the correct angle. Maybe you have reversed the order of s_x and s_y. Also, you can use the acos and asin functions directly on s_x and s_y respectively.

like image 65
Masked Man Avatar answered Sep 19 '22 13:09

Masked Man


I use the acos function to get back the angle from the given s_x cosinus. But because several angles may result to the same cosinus (for example cos(+60°) = cos(-60°) = 0.5), it's not possible to get back the angle directly from s_x. So I also use the sign of s_y to get back the sign of the angle.

// Java code double angleRadian = (s_y > 0) ? Math.acos(s_x) : -Math.acos(s_x); double angleDegrees = angleRadian * 180 / Math.PI; 

for the specific case of (s_y == 0), it does not matter to take +acos or -acos because it means the angle is 0° (+0° or -0° are the same angles) or 180° (+180° or -180° are the same angles).

like image 40
Arnaud SmartFun Avatar answered Sep 19 '22 13:09

Arnaud SmartFun