2016-11-09 7 views
-1

Entschuldigung im Voraus für mein Unwissen in diesem Bereich. Ich habe eine C++ Funktion, die eine Ebene zurückkehrt, als vier Schwimmer, etwa so:Finden Sie die Drehwinkel einer Ebene, gegeben ABCD

float plane[4]; // will contain the computed plane equation result

Wenn dieser Schwimmer ist A,B,C,D, wie kann ich den tatsächlichen Winkel der Ebene (in Grad) als X, Y erhalten , Z?

Zum Beispiel kann die Funktion mit Testdaten liefern:

1, 0, 0, -341.336

Wie soll ich die Berechnung Winkel aus diesen Daten werden?

Vielen Dank.

Antwort

1

Die Koeffizienten A, B, C definieren den normalen Vektor. Mit der arcrosine-Funktion können Sie ganz einfach normale Winkel mit Achsen finden. Beispiel für OX-Achse:

Len = Length(N) = Sqrt(A^2+B^2+C^2) 
Angle(N, OX) = ArcCos(DotProduct(N, OX)/Len) = 
       ArcCos(DotProduct(N, OX))/Len) = 
       ArcCos(DotProduct((A,B,C), (1,0,0)))/Len) = 
       ArcCos((A * 1 + B * 0 + C * 0)/Len) = 
       ArcCos(A/Len) 
for your example 
    Angle(N, OX) = ArcCos(1/1) = 0 (normal coincides with OX ort) 
    Angle(N, OY) = ArcCos(0/1) = Pi/2 
    Angle(N, OZ) = ArcCos(0/1) = Pi/2 
+0

Vielen Dank! Also sind abc ein normaler Vektor, ist d die Rotationsmenge? – anti

+1

Nein, d hat keine Beziehung zur Rotation. Es könnte als Entfernung von der Ebene zum Koordinatenursprung betrachtet werden (wenn a, b, c normalisiert sind) – MBo

+0

ok, ich denke ich verstehe. Also brauche ich einen normalen Vektor (A, B, C) und wandle ihn in Winkel um. Ich werde versuchen, ein Beispiel in C++ zu finden. Danke für Ihre Hilfe. – anti

Verwandte Themen