2010-12-29 9 views
2

Ich bin derzeit dabei, einen Winkel in der Y-Achse mit 'Pi-Winkel' zu reflektieren. Das Winkelsystem, das ich verwende, ist in Radianten, wobei 0 Osten ist, -Pi/2 ist Norden, Pi/2 ist Süden und +/- Pi ist Westen und wenn ich versuche, die obige Methode zu verwenden, um einen Winkel zu reflektieren, ist es häufig gibt Werte über Pi außerhalb des Bereichs zurück. Wie kann ich das verhindern?Reflektierende Winkel in der Y-Achse

Danke,

DLiKS

Antwort

4

Reflexion über die x-Achse: nur -angle verwenden.

Reflexion um die y-Achse: verwenden

if (angle >= 0) 
     return pi - angle 
    else 
     return -pi - angle 

Dies erzeugt einen Verzweigungsschnitt bei 0: 3 ° Karten bis 177 °, während -3 ° bis -177 ° Karten. 0 Karten zu Pi. (Wenn Sie Winkel im Intervall [-pi, pi) benötigen, die + pi ausschließen, ändern Sie "> =" in ">".

Dies setzt auch voraus, dass der Eingabewinkel innerhalb des Bereichs [-pi, pi] liegt, wie Ihre Problemaussage nahelegt. Wenn nicht, müssen Sie zuerst mit einem symmetrischen modulo 2 * pi (wo smod(x,M) = mod(x+M/2,M) - M/2) normalisieren.

+0

vor euch upvote, überprüfen Sie meine Mathematik ;-) frühere Bearbeitungen waren falsch –

+0

und immer noch falsch. Was passiert für einen Winkel = 7 * Pi? – kellogs

+1

Technisch korrekt, wenn die Eingangs- und Ausgangswinkel auf -pi und + pi normiert sind. Sonst hast du Recht. –

0

Da der volle Kreis 2 * pi ist, können Sie immer 2 * pi subtrahieren und den Winkel wieder im Bereich haben.

2

Indem Sie zuerst Ihren Anfangswinkel modulo-geteilt durch Pi. Also, in C Sprache:

angle = fmod(angle, 2*Pi); 
if (angle < -Pi) 
    angle = angle + 2*Pi; 

float inverted = Pi - angle; 

Die Sache ist, Ihre Eingabe vor der weiteren Verarbeitung immer zu normalisieren.

+0

Falsch. Sie müssen Winkel modulo 2 * pi, nicht modulo pi betrachten. –

+0

habe mich: P Jetzt upvote es! ^^ – kellogs

+0

Ich tat, aber Sie möchten vielleicht das "C-Sprache" -Bit entfernen, da "%" ein ganzzahliger Modulo-Operator ist, kein Fließkomma-Operator; Verwenden Sie stattdessen fmod(). –

0

Warum in aller Welt wählen Sie Norden, um -Pi/2 zu sein. Es bricht alle Standard-Stuff wie sin (Winkel) = y-Koordinate auf dem Einheitskreis.

Aber um Ihre Frage zu beantworten, können Sie k * 2Pi zu allen Ihren Winkeln hinzufügen (wobei k eine ganze Zahl ist) und der Winkel bleibt gleich.

+0

Norden ist -Pi/2, weil das Koordinatensystem ich Orte (0,0) oben links benutze und Winkel relativ zur x-Achse gemessen werden. Es ist das Standard-Winkel-System, das von atan2 zurückgegeben wird. – DLiKS