2012-12-29 8 views
10

Ich möchte eine sin/cos Operation umkehren, um einen Winkel zurück zu bekommen, aber ich kann nicht herausfinden, was ich tun sollte.Der Winkel zurück von einer Sin/Cos-Konvertierung

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

Bei s_x und s_y ist es möglich, um wieder den Winkel:

Ich habe sin und cos auf einem Winkel in Radianten den x/y-Vektor als solche zu bekommen verwendet? Ich dachte atan2 war die Funktion zu verwenden, aber ich bekomme nicht die erwarteten Ergebnisse.

Antwort

13

atan2(s_y, s_x) sollte Ihnen den richtigen Winkel geben. Vielleicht haben Sie die Reihenfolge s_x und s_y umgekehrt. Außerdem können Sie die Funktionen acos und asin direkt unter s_x bzw. s_y verwenden.

+0

meine x/y waren in der Tat umgekehrt, da ich einen Code hatte, der die Sünde x zugewiesen hatte und einige andere Bits sin y zugewiesen hatten. –

3

In Mathematik ist umgekehrte Operation für sin und cos. Dies ist ArcSin und Arccos. Ich weiß nicht, welche Programmiersprache Sie verwenden. Aber normalerweise wenn es cos und sin Funktion hat, dann kann es umgekehrte Funktion haben.

2

asin (s_x), acos (s_y), vielleicht, wenn Sie c verwenden.

4

Ich benutze die acos Funktion, um den Winkel aus dem gegebenen s_x cosinus zurück zu bekommen. Da aber mehrere Winkel zum selben Kosinus führen können (zum Beispiel cos (+ 60 °) = cos (-60 °) = 0.5), ist es nicht möglich, den Winkel direkt von s_x zurück zu bekommen. Also verwende ich auch das Zeichen von s_y, um das Zeichen des Winkels zurückzubekommen.

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

für den speziellen Fall von (s_y == 0), ist es egal, + acos oder -acos zu nehmen, weil es der Winkel 0 ° beträgt, bedeutet (+ 0 ° oder -0 ° die gleichen Winkel sind) oder 180 ° (+ 180 ° oder -180 ° sind die gleichen Winkel).

Verwandte Themen