05. Eulerwinkel und Quaternionen
Transcription
05. Eulerwinkel und Quaternionen
Ergänzungen zur Graphische Datenverarbeitung GDV-E Eulerwinkel und Quaternionen Prof. Dr.-Ing. Detlef Krömker Goethe-Universität, Frankfurt Graphische Datenverarbeitung Übersicht 1. Das Problem: Rotationen um beliebige Achsen 2. Die Euler Transformation 3. Quaternionen (Grundlagen letzte Vorlesung) 4. Transformationen mit Quaternionen 5. Zusammenfassung © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 2 SS 2000 Rückblick Rotationen um die Hauptachsen 0 æ1 ç ç 0 cos φ R x (φ ) = ç 0 sin φ ç ç0 0 è æ cos φ ç ç sin φ R z (φ ) = ç 0 ç ç 0 è 0 − sin φ cos φ 0 − sin φ cos φ 0 0 æ cos φ ç ç 0 R y (φ ) = ç − sin φ ç ç 0 è 0ö ÷ 0÷ 0÷ ÷ 1 ÷ø 0 0 0ö ÷ 0÷ 0÷ ÷ 1 ÷ø Eigenschaften: 1. Summe der Elemente der Nebendiagonale Ist bei allen Ri gleich 0 0ö ÷ 0 0÷ 1 0÷ ÷ 0 1 ÷ø © Prof. Dr.-Ing. Detlef Krömker 0 sin φ 1 0 0 cos φ 2 + 2 cos φ 2. Punkte auf der RotationsAchse bleiben unverändert. 3. Rotationsmatrizen sind orthogonal è R-1 = RT GDV-E 4. Eulerwinkel und Quaternionen 3 SS 2000 Rotation um beliebige Achse Problem: Rotation X um beliebige Achse r = (rx,ry,rz)t um den Winkel α: z s α r y x t Aufgabe: Bestimme X Idee: 1. Bestimme s und t so, daß (r,s,t) orthonormale Basis bildet 2. Wechsele Basis zu (r,s,t) 3. Rotiere um Hauptachse x=(r) 4. Rücktransformation zur Basis (x,y,z) © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 4 SS 2000 Rotation um beliebige Achse r Bestimmung einer orthonormalen Basis α s r y x t 1. Orthonormale Basis (r,s,t) bestimmen: erster Basisvektor ist r (normalisiert!) zweiter Basisvektor s soll senkrecht auf r stehen: s= r × ex r × ex oder falls r e x s= r × ey r × ey In der Praxis: Für diesen Test bildet man das Skalarprodukt s.s < ε (z.B. 0,0001) dritter Basisvekto r t= r×s r×s GDV-E 4. Eulerwinkel und Quaternionen © Prof. Dr.-Ing. Detlef Krömker 5 SS 2000 2. Basiswechsel z s z R α t α r s r y x z R-1 t x s r y y x Rx (α) t 2. Rotation R bestimmen: Schreiben wir die Vektoren (r,s,t) in die Spalten Transformationsmatrix, so ist diese orthogonal und transformiert ex → r, ey → s, ez → t. æ r x r y rz 0 ö Das ist genau R-1. Für orthogonale ç ÷ -1 t s s s 0 ç ÷ y z Matrizen A gilt stets A =A . Also erR=ç x halten wir R indem wir die Vektoren t ty tz 0 ÷ ç x ÷ (r,s,t) in die Zeilen von A schreiben. ç 0 0 0 1÷ è © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen ø 6 SS 2000 3. Rotation um x (r) 4. Rücktransformation Schreibt man alle Drehungen in eine Matrix so gilt X = RT R x (α )R æ c + trx 2 ç ç tr r + srz =ç x y ç tr x rz − sry ç 0 è trx ry − srz trx rz + sry c + try try rz − sr x 2 try rz + srx c + try 0 0 mit s = sinα , c = cos α , t = 1 − cos α 2 0 ö÷ 0÷ ÷ 0÷ 1 ÷ø Eine alternative Methode: Quaternionen Für kleine Winkel α (α < 1°) kann man die Bogenlänge sin α durch α und cos α durch 1 approximieren: X klein æ 1 ç ç rα =ç z −r α ç y ç 0 è − rzα 1 ry α − rxα rxα 0 1 0 0ö ÷ 0÷ 0÷ ÷ 1 ÷ø © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 7 SS 2000 Die Eulertransformation Nach dem Schweizer Mathematiker head (y-roll, yaw) Leonard Euler (1707-1783) Wichtige Transformation um pitch (x-roll, nod) z.B. die virtuelle Kamera zu bewegen! roll (z-roll tilt) E( h, p, r ) = R z (r ) R x ( p ) R y (h ) Die Eulerwinkel h,p und r beschreiben, um wieviel sich der Kopf (das Objekt, die Kamera) um die jeweilige Achse dreht. Die Reihenfolge ist prinzipiell gleichgültig, (es gibt 24 Möglichkeiten) muß aber dann fest sein: Angegeben ist eine übliche Reihenfolge! © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 8 SS 2000 Eulertransformation Das Gimbal Lock Die Eulertransformation hat problematische Unstetigkeiten! Ein Beispiel: h=0 (keine Rotation um die y-Achse) p=90o (um die x-Achse) Eine Rotation um die z-Achse ist jetzt nicht mehr möglich, da dieses einer Rotation um die y-Achse entspricht! Ergebnis: Wir haben einen Freiheitsgrad verloren! © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 9 SS 2000 Diskussion Eulertransformation + Intuitiv benutzbar + Camera-Up Vektor (=pitch) einfach und gut kontrollierbar + Gut geeignet für die Bewegung der virtuellen Kamera: insbesondere lassen sich die Eulerwinkel einfach interpolieren! − Gimbal Lock (Unstetigkeit) − Für allgemeine Rotationen bestimmen sich die Eulerwinkel nicht eindeutig (sehen wir später) © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 10 SS 2000 Bestimmung der Eulerwinkel cos p ≠0 Gegeben sei eine orthogonale Transformationsmatrix F. Gesucht die entsprechenden Eulerwinkel. æ f 00 ç çf F = ç 10 f ç 20 ç 0 è f 01 f 02 f11 f 21 0 f12 f 22 0 0ö ÷ 0÷ = R z ( r )R x ( p )R y ( h ) = E ( h , p , r ) 0÷ ÷ 1 ÷ø æ cos r cos h − sin r sin p sin h − sin r cos p cos r sin h + sin r sin p cos h 0 ö ÷ ç ç sin r cos h + cos r sin p sin h cos r cos p sin r sin h − cos r sin p cos h 0 ÷ F=ç − cos p sin h sin p cos p cos h 0÷ ÷ ç ÷ ç 0 0 0 1 ø è Þ p = arcsin f21 f21 = sin p Achtung: f01 − sin r − f01 Viele Unstetigkeiten, = = − tan r Þ r = arctan , sofern cos p ≠ 0 f11 cos r f11 Lösung nicht eindeutig f20 − sin h − f20 Gefahr der nume= = − tan h Þ h = arctan , sofern cos p ≠ 0 f22 cos h f22 rischen Instabilität! © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 11 SS 2000 Bestimmung der Eulerwinkel cos p =0 æ cos r cos h − sin r sin p sin h − sin r cos p cos r sin h + sin r sin p cos h ç ç sin r cos h + cos r sin p sin h cos r cos p sin r sin h − cos r sin p cos h F=ç − cos p sin h sin p cos p cos h ç ç 0 0 0 è cos p = 0 ⇔ sin p = ±1 sin(r ± h ) æ cos( r ± h ) 0 ç ç sin(r ± h ) 0 − cos( r ± h ) F=ç ±1 0 0 ç ç 0 0 0 è 0ö ÷ 0÷ 0÷ ÷ 1 ÷ø 0ö ÷ 0÷ 0÷ ÷ 1 ÷ø Beachte : cos(α ± β ) = cos α cos β m sinα sin β sin(α ± β = sinα cos β ± cos α sin β wähle z.B. h = 0 sin r f f = tan r = 10 Þ r = arctan 10 cos r f00 f00 © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 12 SS 2000 Transformation mit Quaternionen Punkt p = (px, py, pz)T soll um die Drehachse u = (ux, uy, uz)T mit dem Winkel φ gedreht werden. Normalisiere u. Bette p und u in geeignete Quaternionen ein, d.h. pˆ = ( px , py , pz ,0) = (ipx + jpy + kpz + 0) φ φ φ φ φ φ qˆ = (u sin , cos ) = (u x sin u y sin , u z sin cos ) 2 2 2 2 2 2 Berechne: Rq ( p ) = qˆ pˆ qˆ −1 = (p cos φ + (1 − cos φ )(u ⋅ p )u + (u × p ) sin φ ,0) © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 13 SS 2000 Zusammenhang Quaternionen und (4x4) Matrix Ein Quaternion φ φ qˆ = (sin u, cos ) = (q x , q y , q z , qw ) 2 2 repräsentiert eine Drehung um die Drehachse u um den Winkel φ. Die Matrix æ 1 − 2(q y2 + q z2 ) 2(q x q y − qw q z ) 2(q x q z + qw q y ) ç ç 2(q x q y + qw q z ) 1 − 2(q x2 + q z2 ) 2(q y q z − qw q x ) q M =ç 2 2 ç 2(q x q z − qw q y ) 2(q y q z + qw q x ) 1 − 2(q x + q y ) ç 0 0 0 è repräsentiert die gleiche Rotation. (Beachte q ist Einheitsquaternion.) © Prof. Dr.-Ing. Detlef Krömker 0ö ÷ 0÷ ÷ 0÷ 1 ÷ø Siehe hier ... Und rechne ein bisschen! GDV-E 4. Eulerwinkel und Quaternionen 14 SS 2000 Quaternionen und (4x4) Matrix Umkehrung Ohne das wir eine Einheitsquaternion voraussetzen gilt: 0ö ÷ 0÷ ÷ 0÷ 1 ÷ø æ 1 − s(q y2 + q z2 ) s(q x q y − qw qz ) s(q x q z + qw q y ) ç ç s(q x q y + qw q z ) 1 − s(q x2 + q z2 ) s(q y q z − qw q x ) q M =ç 2 2 ç s(q x q z − qw q y ) s(q y q z + qw q x ) 1 − s(q x + q y ) ç 0 0 0 è mit s = 2 / n(qˆ ) Wir beginnen mit folgenden Differenzen: q q m21 − m12 = 2qw q x q q m20 − m02 = 2qw q y d.h., wenn qw bekannt ist, können wir qx, qy und qz berechnen. q q m10 − m01 = 2qw q z © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 15 SS 2000 Quaternionen und (4x4) Matrix Umkehrung (2) tr (Mq ) = 4 − 2s(q x2 + q y2 + q z2 ) æ q x2 + q y2 + q z2 ö ç ÷ = 4 1− 2 ç q + q2 + q2 + q2 ÷ x y z w ø è 4qw2 4qw2 = 2 = q x + q y2 + qz2 + qw2 n(qˆ ) dies ergibt : 1 qw = tr (Mq ) 2 q q m21 − m12 qx = 4qw q q m20 − m02 qy = 4qw q q − m01 m10 qz = 4qw © Prof. Dr.-Ing. Detlef Krömker Lösung ist numerisch nicht immer stabil. Alternativen findet man unter: http://www.acm.org/tog/resources/RTR GDV-E 4. Eulerwinkel und Quaternionen 16 SS 2000 Anwendung von Quaternionen Sphärische Lineare Interpolation Gegeben seien zwei Einheitsqu aternionen qˆ und rˆ und ein Parameter t ∈ [0,1]. Dann ist ( ) t sˆ (qˆ ,rˆ, t ) = rˆqˆ −1 qˆ = slerp(qˆ ,rˆ, t ) = sin(φ (1 − t )) sin(φt ) qˆ + rˆ sinφ sinφ mit cos φ = q x rx + q y ry + q z rz + qw rw Diese Funktion berechet für t=[0,1] die kürzeste Verbindung (Großkreis) auf der vierdimensionalen Einheitskugel zwischen ´q`und´r`. Dieses ist ideal geeignet für die Interpolation (Animation) von Orientierungen von Körpern. Nicht sehr gut für die Orientierung der Kamera, da sich der camera-up Vektor verändern kann! © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 17 SS 2000 Diskussion Transformation mit Quaterionen + keine Singularitäten + Inverses Problem einfach zu lösen + ermöglicht einfache und intuitive Definition von Orientierungen an der Benutzungschnittstelle – mehr Mathematik – nicht sehr gut für Kameraorientierungen geeignet © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 18 SS 2000 Zusammenfassung Orientierung von Objekten ist elementare Operation (4x4)Matrix kann dieses beschreiben, aber die Koeffizienten sind nicht trivial bestimmbar: K K n n User Interface Interpolation zwischen zwei Orientierungen Zwei Lösungen: K n n Eulertransformation und Quaternionen © Prof. Dr.-Ing. Detlef Krömker GDV-E 4. Eulerwinkel und Quaternionen 19 SS 2000