2012-12-29 13 views
10

Desidero invertire un'operazione sin/cos per ottenere un angolo, ma non riesco a capire cosa dovrei fare.Ripristino dell'angolo da una conversione sin/cos

Ho usato sin e cos su un angolo in radianti per ottenere il x/y vettore come tale:

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

Dato s_x e s_y, è possibile recuperare l'angolo? Pensavo che la funzione da utilizzare fosse atan2, ma non ho ottenuto i risultati previsti.

risposta

13

atan2(s_y, s_x) dovrebbe darti l'angolo corretto. Forse hai invertito l'ordine di s_x e s_y. Inoltre, è possibile utilizzare le funzioni acos e asin direttamente su s_x e s_y rispettivamente.

+0

il mio x/y era effettivamente invertito poiché avevo un codice che assegnava il peccato a x e altri bit assegnavano il sin a y. –

3

In matematica è un'operazione inversa per sin e cos. Questo è arcsin e arccos. Non so quale linguaggio di programmazione usi. Ma di solito, se ha funzione cos e sin, può avere una funzione inversa.

2

asin (s_x), acos (s_y), forse, se si utilizza c.

4

Uso la funzione acos per recuperare l'angolo dal s_x coseno specificato. Ma poiché diversi angoli possono risultare nello stesso coseno (ad esempio cos (+ 60 °) = cos (-60 °) = 0,5), non è possibile ottenere indietro l'angolo direttamente da s_x. Quindi uso anche il segno di s_y per ottenere il segno dell'angolo.

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

per il caso specifico di (s_y == 0), non importa prendere + OAC o -acos perché significa l'angolo è 0 ° (+ 0 ° o -0 ° sono gli stessi angoli) o 180 ° (+ 180 ° o -180 ° sono gli stessi angoli).