Wie man beweist, dass jede Drehung durch 3 Euler-Winkel dargestellt werden kann

Wie kann man beweisen, dass jede Drehung eines starren Objekts im dreidimensionalen (3D) Raum durch eine Folge von drei Drehungen um vorab festgelegte Achsen um 3 Euler-Winkel dargestellt werden kann? Ich sehe diese Aussage in vielen Lehrbüchern, aber bisher habe ich keinen Beweis für die Aussage gefunden.

Ich verstehe, dass im Allgemeinen 3 Parameter benötigt werden, um die Rotation eines 3D-Objekts darzustellen (z. B. von Goldstein, Poole und Safko, Classical Mechanics, 3. Aufl. Kap. 4). Ich kann jedoch nicht sicher sein, dass 3 Euler-Winkel solche 3 Parameter sein können.

Im Moment akzeptiere ich, dass es für jede 3D-Rotation eine eindeutige Matrix in der Gruppe SO (3) gibt, die die Koordinaten eines Punktes im gedrehten Objekt transformiert. Ich nehme auch an, dass eine solche Matrix für die Drehung um die z -Achse nach Winkel a wird ausgedrückt als

R z ( a ) = ( cos a Sünde a 0 Sünde a cos a 0 0 0 1 ) ,
und diese Drehung herum j -Achse hat eine ähnliche Matrixdarstellung. Daher verstehe ich das als gegeben EIN S Ö ( 3 ) , kann ich die Euler-Winkel berechnen, indem ich 3 Elemente von vergleiche EIN (z. B. einige der Elemente in der 3. Zeile und 3. Spalte in der unten angenommenen Konvention) mit dem folgenden Produkt von 3 Matrizen, die den Drehungen um 3 Euler-Winkel entsprechen,
R z ( a ) R j ( β ) R z ( γ ) = ( cos a Sünde a 0 Sünde a cos a 0 0 0 1 ) ( cos β 0 Sünde β 0 1 0 Sünde β 0 cos β ) ( cos γ Sünde γ 0 Sünde γ cos γ 0 0 0 1 ) .
Allerdings kann ich nicht sicher sein, ob die berechneten Euler-Winkel immer den anderen nicht in der Berechnung verwendeten Elementen entsprechen.

Gibt es einen einfachen Beweis ohne viel algebraische Manipulation?

"Wie kann man beweisen, dass jede Drehung eines starren Objekts im dreidimensionalen (3D) Raum durch eine Folge von drei Drehungen um vorgegebene Achsen um 3 Euler-Winkel dargestellt werden kann?" Aber so funktionieren die Euler-Rotationen nicht - die Achsen der zweiten und dritten Rotation (dargestellt durch die Matrizen in der obigen Matrizenfolge) sind nicht vorgegeben, sondern hängen von den vorherigen Rotationen ab. Vgl. en.wikipedia.org/wiki/Euler_angles
Manchmal versagen Euler-Winkel, wenn Sie ein entartetes System haben. Es kann also keinen Beweis geben, da es nicht für alle Fälle funktioniert. Da Sie Euler-Winkel nicht verwenden müssen , aber andere Methoden verwenden können, bedeutet dies, dass Euler-Winkel keine eindeutige Darstellung von Rotationen sind.
@JohnAlexiou Selbst im degenerierten Fall (auch bekannt als "Gimbal Lock") versagen Euler-Winkel nicht in dem Sinne, dass es keine Lösung gibt. Das Problem ist, dass die Lösung im Fall der Gimbal-Sperre nicht eindeutig ist.
@JánLalinský Bei dieser Frage geht es um extrinsische Euler-Folgen, eine Reihe von drei Rotationen um Achsen im ursprünglichen Koordinatensystem. Sie haben über intrinsische Euler-Sequenzen geschrieben, eine Reihe von drei Rotationsachsen, die gedreht wurden. Die sind mathematisch verwandt: Einfach die Reihenfolge umkehren.

Antworten (3)

Ein Algorithmus, der nach löst a , β , und γ denn jede gegebene echte 3×3 Rotationsmatrix stellt einen konstruktiven Beweis dar.

R z ( a ) R j ( β ) R z ( γ ) = ( cos a Sünde a 0 Sünde a cos a 0 0 0 1 ) ( cos β 0 Sünde β 0 1 0 Sünde β 0 cos β ) ( cos γ Sünde γ 0 Sünde γ cos γ 0 0 0 1 )

Ausmultiplizieren ergibt dies

R z j z = R z ( a ) R j ( β ) R z ( γ ) = ( heißes Durcheinander heißes Durcheinander cos a Sünde β heißes Durcheinander heißes Durcheinander + Sünde a Sünde β Sünde β cos γ Sünde β Sünde γ cos β )

Beachten Sie, dass das letzte Element der letzten Zeile ist cos β . Gegeben eine richtige Rotationsmatrix R , kann man finden β indem man den inversen Kosinus dieses Elements nimmt:

β = arccos ( R 3 , 3 )
Beachten Sie, dass die anderen beiden Elemente der letzten Spalte einen Ausdruck für ergeben a , und dass die anderen beiden Elemente der letzten Zeile einen Ausdruck für ergeben γ :

a = arctan ( + R 2 , 3 R 1 , 3 ) β = arctan ( + R 3 , 2 + R 3 , 1 )
Sie müssen die Version mit zwei Argumenten von verwenden arctan um zwischen (zum Beispiel) 60 Grad (pi/3) und 240 Grad (4/3*pi) zu unterscheiden. Ich werde die Mathematik nicht durchgehen, aber diese Lösung repliziert das "heiße Durcheinander", das ich ignoriert habe.

Es gibt ein Problem mit dieser Lösung, und das ist wann Sünde β = 0 . Das passiert wann R 3 , 3 ist ±1. Die restlichen Elemente in der letzten Spalte und letzten Zeile sind in diesem Fall identisch Null. Dies wird als "Gimbal-Lock" bezeichnet. Mein "heißes Durcheinander" wird in diesem Fall viel einfacher:

R z j z = ( ± cos ( a + γ ) ± Sünde ( a + γ ) 0 Sünde ( a + γ ) cos ( a + γ ) 0 0 0 ± 1 )
Sie können nach lösen a + γ im Fall der Gimbal-Sperre gibt es dafür aber keine eindeutige Lösung a und γ . Das ist okay; Wählen Sie einfach einen beliebigen Wert (normalerweise Null) für γ (oder a ) und lösen Sie nach dem anderen, vorausgesetzt, dass Sie lösen können a + γ .


Ihre zyz- Sequenz ist in zweierlei Hinsicht ziemlich seltsam. Die kanonische Euler-Rotationssequenz ist eine Drehung um z , gefolgt von einer zweiten Drehung um die einmal gedrehte x - Achse, gefolgt von einer dritten Drehung um die zweimal gedrehte z - Achse. Ihre ist eine Rotation um die anfängliche z- Achse, gefolgt von einer zweiten Rotation um die anfängliche y -Achse, gefolgt von einer dritten Rotation um die anfängliche z- Achse. Dies sind nur zwei der vierundzwanzig verschiedenen Rotationsfolgen, die oft als Euler-Winkel bezeichnet werden. In allen vierundzwanzig Fällen werden Sie das finden

  • Genau ein Element der Rotationsmatrix ist entweder Sünde β , Sünde β , oder cos β , wo β stellt die zweite Rotation in der Sequenz dar (womit Sie nach lösen können β ),
  • Dass die anderen vier Elemente in derselben Zeile / derselben Spalte wie dieses spezielle Element kein "heißes Durcheinander" sind,
  • Außer im Fall der kardanischen Verriegelung ergeben dies eindeutige Lösungen für die anderen beiden Elemente der Rotationssequenz, und
  • Im Fall der Gimbal-Sperre können Sie nach lösen a + γ oder a γ . Wählen Sie in diesem Fall willkürlich einen Wert für γ (normalerweise null) und Sie werden in der Lage sein zu finden a .
Dies muss nebenbei bemerkt werden, denn der folgende Link wird in ein paar Monaten verschwinden, wenn Google googlecode.com abschaltet. Vor sieben Jahren entwickelte ich einen meiner Meinung nach cleveren Algorithmus zur Handhabung aller 12 intrinsischen Euler-Winkel. Ein NASA-Beamter wollte, dass ich das veröffentliche. Ich habe die entsprechende Literaturrecherche durchgeführt und festgestellt, dass ich nicht so schlau bin, wie ich dachte. Ein sehr ähnlicher Algorithmus war in einem Computergraphik-Text veröffentlicht worden. Da meine Lösung nicht einzigartig war, traf der ITAR-Unsinn nicht zu, und dieser Beamte konvertierte meinen Code in Java, um ihn in einem Smack-Down-Wettbewerb zu verwenden. ...
Ich würde ein kleines Detail hinzufügen, das für β = arccos ( R 3 , 3 ) um uns einen echten Blickwinkel zu geben β es ist nötig dass | R 3 , 3 | 1 . Glücklicherweise ist dies garantiert, weil R z j z ist eine orthonormale Matrix.
Während der Google-Code schon lange vorbei ist, hat die Wayback-Maschine immer noch diesen Algorithmus: web.archive.org/web/20160103223542/http://… .

Es gibt einen konstruktiven Beweis, der intuitiv verstanden werden kann. Ich nehme an, z ist vertikal und y ist vorwärts / rückwärts. Sie drehen das Objekt um die z-Achse, bis sich die Spitze irgendwo auf der xz-Ebene befindet, dh y = 0. Dadurch zeigt die Oberseite des Objekts senkrecht zur y-Achse, sodass Sie es um die y-Achse drehen können, bis es nach oben zeigt. Und jetzt müssen Sie es nur noch auf der z-Achse drehen, bis vorwärts in die richtige Richtung zeigt.

Wenn Sie wissen möchten, was die ursprüngliche Rotation war, machen Sie einfach das Gegenteil von jedem dieser Schritte und setzen Sie sie in umgekehrter Reihenfolge. Wenn Sie beispielsweise um 10°, -30°, 50° gedreht haben, sind es nur -50°, 30°, -10°, um die ursprüngliche Drehung aus der richtigen Drehung zu erhalten.

Diese Abfolge von Operationen kann immer durchgeführt werden, unabhängig davon, wie ein Objekt orientiert ist. Es ist nicht unbedingt einzigartig. Wenn oben bereits nach oben zeigt, befindet es sich auf der richtigen Ebene, egal wie viel Sie um die z-Achse drehen. Aber der Punkt ist, dass es eine gewisse Drehung um die z-Achse gibt, die es auf der richtigen Ebene belässt, die es gibt.

Bearbeiten:

Wenn Sie etwas streng Mathematischeres wollen, nehmen Sie an, Sie haben einen orthogonalen Rahmen von Vektoren, x = ( x 1 , x 2 , x 3 ) , j = ( j 1 , j 2 , j 3 ) , und z = ( z 1 , z 2 , z 3 ) .

z ist die Oberseite des Objekts, also drehen wir es zuerst so z 2 ' = 0 . Wir drehen es einfach um arctan z 2 z 1 , und es zeigt schließlich auf z ' = ( ± z 1 2 + z 2 2 , 0 , z 3 ) . Und drehen Sie es ein anderes 180 wenn das ein negatives statt ein positives hat, so ist es z ' = ( z 1 2 + z 2 2 , 0 , z 3 ) . arctan z 2 z 1 ist nur im Fall von wirklich undefiniert z 1 = z 2 = 0 , drehen Sie es in diesem Fall überhaupt nicht.

Jetzt drehen wir auf der j -Achse durch arctan z 1 2 + z 2 2 z 3 und wir bekommen z = ( 0 , 0 , z 1 2 + z 2 2 + z 3 2 ) was sein muss ( 0 , 0 , 1 ) da es sich um einen Einheitsvektor handelt. Wenn es nicht definiert ist, müssen wir es nicht drehen.

Seit j z und wir drehen uns nur, j z .

Von dort wissen wir j 3 = 0 , also haben wir j = ( j 1 , j 2 , 0 ) .

Drehen Sie es einfach auf der z -Achse durch arctan j 1 j 2 plus ein Zuschlag 180 wenn es in die falsche Richtung zeigt, und wir bekommen j = ( 0 , j 1 2 + j 2 2 , 0 ) . Und das ist nur ( 0 , 1 , 0 ) , da es sich um einen Einheitsvektor handelt.

In diesem Fall j 1 und j 2 können nicht beide Null sein, also müssen wir uns keine Sorgen machen arctan überhaupt undefiniert sein.

Da wir auf der gedreht haben z -Achse und z war schon am z -Achse, z = z .

Alles was uns bleibt ist x . Seit x = j × z , und wir rotieren nur, x = j × z .

x = ( 0 , 1 , 0 ) × ( 0 , 0 , 1 )

x = ( 1 , 0 , 0 )

Lieber Daniel. Ich würde diese Argumentation wirklich gerne verstehen. Könnten Sie die "Oberseite" des Objekts definieren. Wenn Sie es auch so umformulieren könnten, dass Ihr "Objekt" ein orthogonaler Rahmen von Einheitsvektoren ist X ^ ' , Y ^ ' , Z ^ ' und beschreiben Sie ihre Bilder nach jeder konstituierenden Rotation, ich denke, es wird viel klarer sein.
Danke Daniel. Cool und intuitiv. Ich bin fast überzeugt, aber ich denke, wir können auf eine von WetSavannaAnimal alias Rod Vance vorgeschlagene Weise präziser sein.

Der Einfachheit halber möchte ich zuerst die Vorzeichenkonvention ändern. Das ist,

R z ( a ) = ( cos a Sünde a 0 Sünde a cos a 0 0 0 1 ) , R j ( β ) = ( cos β 0 Sünde β 0 1 0 Sünde β 0 cos β ) , R z ( γ ) = ( cos γ Sünde γ 0 Sünde γ cos γ 0 0 0 1 ) ,
und wir überlegen
R ( a , β , γ ) R z ( a ) R j ( β ) R z ( γ ) .

Erinnern Sie sich als Nächstes an die 3D-Rotationsmatrix R ( a , β , γ ) eindeutig bestimmt wird, indem angegeben wird, wo sich die drei Einheitsvektoren befinden e ^ 1 ( 1 , 0 , 0 ) T , e ^ 2 ( 0 , 1 , 0 ) T , und e ^ 3 ( 0 , 0 , 1 ) T zugeordnet sind. [Dies sind in der Tat die drei Spalten von R ( a , β , γ ) .]

Es ist einfach, das zu überprüfen e ^ 3 zugeordnet ist

e ^ 3 ' R ( a , β , γ ) e ^ 3 = ( Sünde β cos a , Sünde β Sünde a , cos β ) T n ^ ( β , a ) ,
wo n ^ ( β , a ) ist der Einheitsvektor mit dem Polarwinkel β und der Azimutwinkel a . Beachten Sie dies durch Anpassen a und β , wir können machen R ( a , β , γ ) e ^ 3 ein beliebiger Einheitsvektor sein, den wir wählen.

Nehmen wir als Nächstes an, dass wir reparieren a und β , und einstellen γ = 0 . Wir haben e ^ 3 ' = n ^ ( β , a ) , und die beiden Einheitsvektoren e ^ 1 ' und e ^ 2 ' (definiert analog zu e ^ 3 ' ) folgende Bedingungen erfüllen:

(1) Beide liegen auf der Ebene, die senkrecht dazu steht n ^ ( β , a ) und enthält den Ursprung.

(2) Sie haben eine feste Orientierung [weil d e t R ( a , β , γ ) = 1 ].

(3) e 1 ' e 2 ' .

Durch weiteres Drehen um n ^ ( β , a ) um einen beliebigen Winkel γ , wir können uns anpassen e ^ 1 ' und e ^ 2 ' zwei beliebige Einheitsvektoren sein, die die oben angegebenen Einschränkungen erfüllen. Daher eine beliebige 3D-Rotationsmatrix M vertreten werden kann durch

M = R n ^ ( a , β ) ( γ ) R ( a , β , 0 ) = R n ^ ( a , β ) ( γ ) R z ( a ) R j ( β ) .
Hier, a und β bestimmen M e ^ 3 , und für eine feste M e ^ 3 , γ bestimmt M e ^ 1 und M e ^ 2 .

Jetzt beachte das R ( a , β , 0 ) Karten die z Einheitsvektor (dh e ^ 3 ) zu n ^ ( a , β ) . Somit,

R n ^ ( a , β ) ( γ ) = R ( a , β , 0 ) R z ( γ ) R ( a , β , 0 ) 1 ,
und
M = R n ^ ( a , β ) ( γ ) R ( a , β , 0 ) = R ( a , β , 0 ) R z ( γ ) = R z ( a ) R j ( β ) R z ( γ ) = R ( a , β , γ ) .