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