Transformation vom globalen Koordinatensystem in ein lokales

Ich habe ein Flugzeug drin R 3 , definiert durch einen Richtungsvektor

N = N X , N j , N z
und ein Punkt C ( X 1 , Y 1 , Z 1 ) . Die Richtung des normalen Einheitsvektors N wird aus der Höhe und den Azimutwinkeln des Flugzeugs beschrieben a , A jeweils als:
N = cos ( a ) Sünde ( A ) , cos ( a ) cos ( A ) , Sünde ( a ) .
Nehmen Sie einen Punkt an P ( X P , Y P , Z P ) der auf der Ebene liegt (z. B. Schnittpunkt einer Geraden mit einer Ebene).

Wie kann ich Punkt konvertieren P ( X P , Y P , Z P ) vom globalen Koordinatensystem zum lokalen Koordinatensystem der Ebene und schließlich erhalten P ( X P , j P , 0 ) ?

Alles in Großbuchstaben X , Y , Z beziehen sich auf das globale Koordinatensystem.

Alles klein geschrieben X , j , z zum lokalen Koordinatensystem der Ebene.

Falls es Ihnen wichtig ist, geben die Formeln in meiner Antwort einen Satz von Ebenenkoordinaten an, nicht den Satz von Ebenenkoordinaten. (Es gibt keine eindeutige Wahl von Ebenenkoordinaten.) Diese Formeln sind numerisch instabil für Ebenen, deren Normalenvektor nahe bei liegt ± ( 0 , 0 , 1 ) ; Aus topologischen Gründen gibt es keine Möglichkeit, dieses Problem vollständig zu vermeiden.
@ user86418 Vielen Dank für die Klarstellung.

Antworten (1)

Wenn N = ± 0 , 0 , 1 , Dann Z P = 0 und schon ist Ihr Punkt in der gewünschten Form.

Ansonsten, u 1 = cos ( A ) , Sünde ( A ) , 0 Und u 2 = N × u 1 = Sünde ( a ) Sünde ( A ) , Sünde ( a ) cos ( A ) , cos ( a ) sind eine orthonormale Basis für Ihre Ebene, und

X P = ( P C ) u 1 = ( X P X 1 ) cos ( A ) + ( Y P Y 1 ) Sünde ( A ) , j P = ( P C ) u 2 = ( X P X 1 ) Sünde ( a ) Sünde ( A ) ( Y P Y 1 ) Sünde ( a ) cos ( A ) + ( Z P Z 1 ) cos ( a ) .

Vielen Dank! Ich versuche einen Fall: tube.geogebra.org/student/m1110279 Flugzeug von: Punkt: C = ( 4 , 2 , 1 ) Normalvektor: H = 0,12 , 0,24 , 0,86 Punkt A im Flugzeug: A = ( 2.67 , 1.51 , 0,95 ) Ich rechne: A = A R C S ich N ( H 2 ) = 1.03 A = { 2 π H 1 C Ö S ( A ) , wenn ein  <  0 H 1 C Ö S ( A ) , wenn ein   0 = 4.22 u 1 = 0,47 , 0,88 , 0 , u 2 = 0,76 , 0,4 , 0,22 Und zuletzt: X e = 6.12 , j e = 3.63 Aber e = 7.22 C E = 7.54 Habe ich etwas falsch gemacht?
@T81: Es scheint deine H ist kein Einheitsvektor. (Um dies zu beheben, teilen Sie H von H . :) Möglicherweise als Ergebnis, u 1 Und u 2 sind keine Einheitsvektoren. (Mit u 1 Das Problem kann ein Rundungsfehler sein, aber u 2 0,8866 .) Eigentlich deine u 1 Und u 2 sind auch nicht orthogonal....
Ich hatte angenommen, Sie wüssten die Höhe und den Azimut Ihres Flugzeugs. :) Anstatt inverse trigonometrische Funktionen zu verwenden: If N = ( A , B , C ) ist dann ein Einheitsvektor
u 1 = ( B , A , 0 ) A 2 + B 2 , u 2 = N × u 1 = ( C A , C B , A 2 + B 2 ) A 2 + B 2 .
Dann benutze X P = ( P C ) u 1 Und j P = ( P C ) u 2 .
Großartig! In der Tat H war kein Einheitsvektor. Wenn konvertiert und entweder mit den Invert-Trig-Funktionen fortgefahren wird oder die obige Empfehlung verwendet wird, habe ich X e = 7.54 , j e = 0,16 Und e = 7.54 . Eigentlich vermeide ich lieber inverse Triggerfunktionen. Danke nochmal! :)
Falls ich das Ergebnis haben möchte X e = 7.54 , j e = + 0,16 Kann ich gehen: u 1 = ( B , A , 0 ) A 2 + B 2 ?
@T81: "Ja". :) (Genauer gesagt multiplizieren u 1 von 1 multipliziert sich auch u 2 = N × u 1 von 1 , was die Vorzeichen beider Koordinaten ändert.)