Mmh, mein Algebra-Kurs liegt doch schon einige Zeit zur�ck und ich finde
keine gute Quelle, die mir helfen k�nnte, mein Problem zu l�sen. Ich
habe eine 3x3 Rotationsmatrix mit Elementen r11, r12, r13 etc. Wie kann
ich diese nun zerlegen, dass ich daraus die 3 Euler-Winkel
herausbekomme? Und gibt's daf�r eine MATLAB-Funktion?
Besten Dank f�r eure Hilfe
Andreas
Siehe
H.R. Schwarz, Numerische Mathematik, B.G. Teubner Stuttgart
Kap. 6.2.1 und 6.2.2
--
Gr��e JCH
3x je eine Ebene rotieren.
1) xy-Ebene
2) xz-ebene
3) yz-ebene
Jeweils mit einer "Dreiecks"-Rotation eine der beiden
Koordinaten auf Null rotieren und diese drei Rotationen
abspeichern/behalten
In MatMate habe ich eine Funktion, die zwei (oder mehr)
Achsen auf Dreiecksform rotiert und die daf�r n�tige
Rotationsmatrix zur�ckgibt.
Mit einer zuf�lligen Rotationsmatrix t gergibt sich
folgender Ablauf:
;===========================================
;MatMate-Listing vom:09.02.2010 20:15:38
;============================================
[1] set listing=on
t : // die zuf�llige Roationsmatrix
0.56 -0.07 0.82
0.83 0.04 -0.56
0.01 1.00 0.09
// nun wird die Rotationsmatrix z12 gesucht. rotiert werden die Spalten {1,2}
// und das Rotationskriterium wird aus den Zeilen 1,2,3 genommen (die 3 k�nnte
// entfallen. Man sieht, da� z12 nur die x-y-Ebene rotiert und die z-koordinate
// unber�hrt l��t
[2] z12 = gettrans(t,"drei",{1,2,3},{1,2})
z12 :
0.99 0.13 0.00
-0.13 0.99 0.00
0.00 0.00 1.00
// Die Rotation, auf t angewendet gibt t1:
[3] t1 = t*z12
t1 :
0.57 0.00 0.82
0.81 0.15 -0.56
-0.12 0.99 0.09
// nun wird die Rotationsmatrix z13 gesucht. rotiert werden die Spalten {1,3}
[4] z13 = gettrans(t1,"drei",{1,3,2},{1,3})
z13 :
0.57 0.00 -0.82
0.00 1.00 0.00
0.82 0.00 0.57
[5] t2 = t1*z13
t2 :
1.00 0.00 0.00
0.00 0.15 -0.99
-0.00 0.99 0.15
// nun wird die Rotationsmatrix z23 gesucht. rotiert werden die Spalten {2,3}
[6] z23 = gettrans(t2,"drei",{2,3,1},{2,3})
z23 :
1.00 0.00 0.00
0.00 0.15 0.99
0.00 -0.99 0.15
[7] t3 = t2*z23
t3 :
1.00 0.00 0.00
0.00 1.00 0.00
-0.00 -0.00 1.00
t3 ist jetzt die mit 3 Euler-Winkeln auf ID rotierte matrix t.
D.h. die drei Euler-Winkel k�nnen jetzt aus den cosinussen und sinussen
in z12,z13,z23 bestimmt werden.
Solch eine "Dreiecks-"rotationsprozedur sollte in Maple
leicht zu basteln sein...
Gru� -
Gottfried
Ich hab' das letztens berechnet und kam da auf folgende Formeln f�r die
Rotationsmatrix R = R_ij:
R11=cc*cb R12=sa*sb*cc+ca*sc R13=-ca*sb*cc+sa*sc
R21=-cb*sc R22=-sa*sb*sc+ca*cc R23=ca*sb*sc+sa*cc
R31=sb R32=-sa*cb R33=ca*cb
Zur Erkl�rung: sa, sb, sc steht f�r sin(alpha), sin(beta), sin(gamma),
ca, cb, cc analog f�r cos(alpha) etc. alpha, beta, gamma sind die
Eulerwinkel bei Rotation um x-, y-, z-Achse (in dieser Reihenfolge von
rechts nach links). Aus der dritten Zeile sollte man beta und alpha
berechnen k�nnen, gamma dann aus R11 bzw. R21.
--
Thomas Nordhaus
Wenn ich mir die Matrizen anschaue
http://de.wikipedia.org/wiki/Eulersche_Winkel
und nehme z.B. die Matrix Mzxz, dann bekomme ich
teta=arccos(r33);
-tan(psi)=r13/r23; psi=arctan(-(r13/r23))
tan(phi)=r31/r32; phi=arctan(r31/r32)
Jetzt muss man allerdings noch �ber die Vorzeichen der Winkel nachdenken.
Den Winkel phi kann man mit dem atan2 direkt berechnen
(vorausgesetzt sin(teta)!=0).
Zur eindeutigen Berechnung der beiden anderen Winkeln muss man
die �brigen Matrixelemente heranziehen.
Vielleicht gelingt es, diese Elemente so zu teilen/umzuformen,
dass man eine Aussage �ber die Vorzeichen bekommt.
Notfalls nimmt man ein Vorzeichen an, berechnet die Elemente
und �berpr�ft/korrigiert dann die Werte.
Mit Gru�
Ernst Sauer
>
> > Mmh, mein Algebra-Kurs liegt doch schon einige Zeit zurück und ich finde
> > keine gute Quelle, die mir helfen könnte, mein Problem zu lösen. Ich
> > habe eine 3x3 Rotationsmatrix mit Elementen r11, r12, r13 etc. Wie kann
> > ich diese nun zerlegen, dass ich daraus die 3 Euler-Winkel
> > herausbekomme? Und gibt's dafür eine MATLAB-Funktion?
>
> > Besten Dank für eure Hilfe
>
> > Andreas
Wie ist es hiermit:
http://1iz.heim.at/theart-Dateien/rot-deutsch.pdf
Mit freundlichen Grüßen
Hero