Discussion:
Eindeutigkeit Eulersche Winkel
(zu alt für eine Antwort)
Ingo Albers
2003-08-27 13:24:36 UTC
Permalink
[achtung: länglich]

Hallo zusammen,

ich habe zwar schon einige interessante postings zum Thema
Eulerwinkel bei groups.google gefunden, aber mein Anliegen
trifft das noch nicht so ganz, daher hier meine Frage.

Ich habe folgende Anwendung:
Ich habe ein Ausgangs-Koordinatensystem (KS_alt) sowie ein
Ziel-KS (KS_neu). Beide sind rechtwinklig und rechtsdrehend.
Die Richtungsvektoren des KS_neu liegen bezogen auf das
KS_alt vor. Der Ursprung ist identisch, es handelt sich also
um reine Rotationen.

Innerhalb eines Berechnungsalgorithmus möchte ich nun unab-
hängig von der Lage des KS_neu eine eindeutige Eulermatrix
formulieren, mit der ich dann meine gewünschten Koordinaten-
Transformationen durchführen kann.

Dazu gibt es einige verschiedene Euler Konventionen (hier
sprach mal jemand von 24 verschiedenen, die Literaturquelle
"Graphics Gems" konnte ich über unsere Bib aber leider bisher
nicht beziehen).

Ich würde gerne eine Konvention verwenden, die mit der Information
der drei Richtungswinkel des KS_neu die Eulerwinkel eindeutig
festlegt.

Mit eindeutig meine ich in diesem Sinne, dass ich mich nicht um
Winkelvorzeichen, Zählrichtung von Winkeln und z.B. der Thematik
"cos(45°)=cos(-45°)" kümmern möchte, weil ich eine Berechnung
programmieren möchte, bei der ein zwischenzeitliches "scharfes
Hinsehen" einfach nicht möglich ist.

Daher erscheint mir die x-Konvention unter
http://mathworld.wolfram.com/EulerAngles.html
als ungeeignet.

Im Taschenbuch der Mathematik (Bronstein et al, 2.Auflage) habe ich
eine andere Konvention entdeckt (S. 179f).

+++Quote+++

Eulersche Winkel
Die Lage des neuen KS relativ zum alten kann mit Hilfe von drei
Winkeln, die Euler eingeführt hat, vollständig bestimmt werden.

a) Nutationswinkel theta wird der Winkel zwischen den positiven
Richtungen der z- und der z_neu-Achse genannt, er liegt in den
Grenzen 0 <= theta < Pi [1]

b) Präzessionswinkel psi wird der Winkel zwischen der positiven
Richtung der x-Achse und der Schnittgeraden OA zwischen der
x,y- und x_neu, y_neu - Ebene genannt. [2] Die positive Richtung
von theta wird derart gewählt, dass die z-Achse, die z_neu-Achse
sowie OA ein Richtungstripel mit der gleichen Orientierung bilden
wie die Koordinatenachsen. [3] Die Messung von psi erfolgt von der
x-Achse aus in Richtung y-Achse; die Grenzen sind 0 <= psi < Pi [4]

c) Drehungswinkel phi wird der Winkel zwischen der positiven
x_neu-Richtung und der Schnittgeraden OA genannt; er liegt in den
Grenzen 0 <= phi < 2Pi [5]

Setzen wir nun
c1=cos theta c2=cos psi c3=cos phi
s1=sin theta s2=sin psi s3=sin phi

dann ergibt sich folgende Eulermatrix A:
a11=c2*c3-c1*s2*s3 a12=-c2*s3-c1*s2*c3 a13=s1*s2
a21=s2*c3+c1*c2*s3 a22=-s2*s3+c1*c2*c3 a23=-s1*c2
a31=s1*s3 a32=s1*c3 a33=c1

+++Ende Quote+++

zu [1]:
bin ich hier mit
theta=arccos((vek_z*vek_z_neu)/(vek_z^2*vek_z_neu^2)^1/2)
auf der sicheren Seite?

zu [2]:
Ich berechne einen Vektor s der Schnittgeraden OA und
erzeuge gleichzeitig -s, um den Schnittgeradenvektor
in beiden Richtungen vorrätig zu haben.
Dann muss ich anscheinend wählen, ob ich s oder -s
nehmen muss. Damit z, z_neu sowie OA ein rechtshändiges
Richtungstripel bilden, verstehe ich das so, dass diese
drei Vektoren einen Körper mit positivem Volumen aufspannen
müssen, das Spatprodukt also >0 sein muss. Hiermit kann ich
also den Richtungsvektor von OA festlegen (s oder -s).
Ist das soweit korrekt?

zu [3]:
diesen Satz verstehe ich nicht ganz. Wieso jetzt "theta", wenn
wir doch in b) über "psi" reden? Ansonsten: Richtungstripel ist
nach [2] verstanden.

zu [4]:
Wofür ist das wichtig? Wenn ich den Winkel analog zu [1] messe
(arccos), dann erhalte ich doch eh einen Winkel zwischen 0 und
Pi, oder?

zu [5]:
Wie sollte ich hier den Winkel berechnen?

Könnt Ihr durchblicken, ob diese Konvention für meinen Fall (s.o.)
geeignet ist oder seht Ihr Lücken, die man mit einem Algorithmus
nicht abdecken kann? Kennt Ihr ggf. eine andere, für mich geeignetere
Konvention? Falls Ihr noch andere Literaturquellen habt, gerne
hier anführen.

Vielen Dank für Eure Mühe.

Gruß,
Ingo
Thomas Peters
2003-08-27 16:50:59 UTC
Permalink
[Euler-Winkel]
Bist du sicher, dass du für deine Rechnungen die SO(3)
und nicht besser die SU(2) verwenden willst? Das ist um
vieles eleganter. Eine einfache Besprechung findest du in
(und jetzt verweise ich schon zum dritten Mal in dieser Woche
auf dies schöne Buch)
Needham, Visual Complex Analysis.
--
Thomas Peters

www.mathe-seiten.de
Ingo Albers
2003-08-27 21:51:03 UTC
Permalink
Post by Thomas Peters
[Euler-Winkel]
Bist du sicher, dass du für deine Rechnungen die SO(3)
und nicht besser die SU(2) verwenden willst? Das ist um
vieles eleganter.
Ich gebe hier zu, dass ich die Begrifflichkeiten SO(3)
usw. (noch) nicht kenne. Ich kenne nur die diversen
Definitionen der Konventionen von Mathworld. Sorry.
Post by Thomas Peters
Eine einfache Besprechung findest du in
(und jetzt verweise ich schon zum dritten Mal in dieser Woche
auf dies schöne Buch)
Needham, Visual Complex Analysis.
Soeben vorbestellt, wird mir morgen frueh auf den Schreibtisch
geliefert ;-) (unsere Bib hat allerdings nur die dt. Variante,
ich hoffe, die taugt auch was)

Gruss und danke
Ingo
Andreas Kabel
2003-08-27 17:50:13 UTC
Permalink
Post by Ingo Albers
[achtung: länglich]
Hallo zusammen,
ich habe zwar schon einige interessante postings zum Thema
Eulerwinkel bei groups.google gefunden, aber mein Anliegen
trifft das noch nicht so ganz, daher hier meine Frage.
Ich habe ein Ausgangs-Koordinatensystem (KS_alt) sowie ein
Ziel-KS (KS_neu). Beide sind rechtwinklig und rechtsdrehend.
Die Richtungsvektoren des KS_neu liegen bezogen auf das
KS_alt vor. Der Ursprung ist identisch, es handelt sich also
um reine Rotationen.
Innerhalb eines Berechnungsalgorithmus möchte ich nun unab-
hängig von der Lage des KS_neu eine eindeutige Eulermatrix
formulieren, mit der ich dann meine gewünschten Koordinaten-
Transformationen durchführen kann.
Hae? Wenn Du das neue Koordinatensystem kennst, kennst Du
doch trivialerweise die Transformationsmatrix. Mir ist nicht
klar, wieso Du Dich um Eulerwinkel sorgst.
Jürgen Appel
2003-08-27 22:50:25 UTC
Permalink
Post by Andreas Kabel
Post by Ingo Albers
Innerhalb eines Berechnungsalgorithmus möchte ich nun unab-
hängig von der Lage des KS_neu eine eindeutige Eulermatrix
formulieren, mit der ich dann meine gewünschten Koordinaten-
Transformationen durchführen kann.
Hae? Wenn Du das neue Koordinatensystem kennst, kennst Du
doch trivialerweise die Transformationsmatrix.
Ja, ich kenne das neue Koordinatensystem bezogen auf das alte.
(drei rechtwinklige, rechtsdrehende Richtungsvektoren im globalen
KS)
Na fein, Du weißt also, wohin die Basisvektoren des alten
Koordinatensystems gedreht werden?

Seien ex=[ex_1,ex_2,ex_3]^T, ey=[ey_1,ey_2,ey_3]^T, ez=[ez_1,ez_2,ez_3]^T
die Koordinaten der neuen Basisvektoren in der alten Basis.

Dann ist die Matrix
[ ex_1 ey_1 ez_1 ]
M = [ex, ey, ez]= [ ex_2 ey_2 ez_2 ] die Matrix,
[ ex_3 ey_3 ez_3 ]
die vom neuen Koordinatensystem in das alte umwandelt. Das sieht man
sofort, wenn man sich klarmacht, welche Koordinaten die neuen
Basisvektoren (beispielsweise ex) in der neuen Basis haben und was damit
passiert, wenn man dann entsprechend
[1]
M [0] ausrechnet.
[0]

Die Matrix, die vom alten ins neue Koordiantensystem transformiert, also in
die andere Richtugn wirkt, ist logischerweise dann zwangsläufig die
inverse Matrix M^{-1}.

Wenn deine neuen Basisvektoren wieder eine Orthonormalbasis bilden ist M
eine orthonormale Matrix. Dann ist M^{-1}=M^T, du mußt zum Invertieren
also nur an der Hauptdiagonale spiegeln:

[ ex_1 ey_1 ex_3 ]
M^T = [ ey_1 ey_2 ey_3 ].
[ ez_1 ez_2 ez_3 ]

(Was nichts anderes heißt, daß Du die neue x-Komponente bekommst, indem Du
das Skalarprodukt mit dem ex-Vektor bildest usw...)
Post by Andreas Kabel
Mir ist nicht klar, wieso Du Dich um Eulerwinkel sorgst.
Winkel will man in der Computerei so weit wie möglich vermeiden, das wird
nur unschön mit der ganzen Trigonometrie. Bleib lieber bei
Skalarprodukten, Einheitsvektoren oder Matrizen.

Gruß
Jürgen
--
GPG key:
http://pgp.mit.edu:11371/pks/lookup?search=J%FCrgen+Appel&op=get
Jürgen Appel
2003-08-27 22:55:48 UTC
Permalink
Post by Andreas Kabel
Post by Ingo Albers
Innerhalb eines Berechnungsalgorithmus möchte ich nun unab-
hängig von der Lage des KS_neu eine eindeutige Eulermatrix
formulieren, mit der ich dann meine gewünschten Koordinaten-
Transformationen durchführen kann.
Hae? Wenn Du das neue Koordinatensystem kennst, kennst Du
doch trivialerweise die Transformationsmatrix.
Ja, ich kenne das neue Koordinatensystem bezogen auf das alte.
(drei rechtwinklige, rechtsdrehende Richtungsvektoren im globalen
KS)
Na fein, Du weißt also, wohin die Basisvektoren des alten
Koordinatensystems gedreht werden?

Seien ex=[ex_1,ex_2,ex_3]^T, ey=[ey_1,ey_2,ey_3]^T, ez=[ez_1,ez_2,ez_3]^T
die Koordinaten der neuen Basisvektoren in der alten Basis.

Dann ist die Matrix
[ ex_1 ey_1 ez_1 ]
M = [ex, ey, ez]= [ ex_2 ey_2 ez_2 ] die Matrix,
[ ex_3 ey_3 ez_3 ]
die vom neuen Koordinatensystem in das alte umwandelt. Das sieht man
sofort, wenn man sich klarmacht, welche Koordinaten die neuen
Basisvektoren (beispielsweise ex) in der neuen Basis haben und was damit
passiert, wenn man dann entsprechend
[1]
M [0] ausrechnet.
[0]

Die Matrix, die vom alten ins neue Koordiantensystem transformiert, also in
die andere Richtugn wirkt, ist logischerweise dann zwangsläufig die
inverse Matrix M^{-1}.

Wenn deine neuen Basisvektoren wieder eine Orthonormalbasis bilden ist M
eine orthonormale Matrix. Dann ist M^{-1}=M^T, du mußt zum Invertieren
also nur an der Hauptdiagonale spiegeln:

[ ex_1 ex_2 ex_3 ]
M^T = [ ey_1 ey_2 ey_3 ].
[ ez_1 ez_2 ez_3 ]

(Was nichts anderes heißt, daß Du die neue x-Komponente bekommst, indem Du
das Skalarprodukt mit dem ex-Vektor bildest usw...)
Post by Andreas Kabel
Mir ist nicht klar, wieso Du Dich um Eulerwinkel sorgst.
Winkel will man in der Computerei so weit wie möglich vermeiden, das wird
nur unschön mit der ganzen Trigonometrie. Bleib lieber bei
Skalarprodukten, Einheitsvektoren oder Matrizen.

Gruß
Jürgen
--
GPG key:
http://pgp.mit.edu:11371/pks/lookup?search=J%FCrgen+Appel&op=get
Ingo Albers
2003-08-28 14:44:54 UTC
Permalink
Post by Jürgen Appel
Na fein, Du weißt also, wohin die Basisvektoren des alten
Koordinatensystems gedreht werden?
Seien ex=[ex_1,ex_2,ex_3]^T, ey=[ey_1,ey_2,ey_3]^T, ez=[ez_1,ez_2,ez_3]^T
die Koordinaten der neuen Basisvektoren in der alten Basis.
Dann ist die Matrix
[ ex_1 ey_1 ez_1 ]
M = [ex, ey, ez]= [ ex_2 ey_2 ez_2 ] die Matrix,
[ ex_3 ey_3 ez_3 ]
die vom neuen Koordinatensystem in das alte umwandelt. Das sieht man
sofort, wenn man sich klarmacht, welche Koordinaten die neuen
Basisvektoren (beispielsweise ex) in der neuen Basis haben und was damit
passiert, wenn man dann entsprechend
[1]
M [0] ausrechnet.
[0]
Die Matrix, die vom alten ins neue Koordiantensystem transformiert, also in
die andere Richtugn wirkt, ist logischerweise dann zwangsläufig die
inverse Matrix M^{-1}.
[snip]

Auch hier vielen Dank & siehe Posting an Horst.

Gruß & danke
Ingo

Horst Kraemer
2003-08-27 23:38:01 UTC
Permalink
Post by Ingo Albers
[achtung: länglich]
Hallo zusammen,
ich habe zwar schon einige interessante postings zum Thema
Eulerwinkel bei groups.google gefunden, aber mein Anliegen
trifft das noch nicht so ganz, daher hier meine Frage.
Ich habe ein Ausgangs-Koordinatensystem (KS_alt) sowie ein
Ziel-KS (KS_neu). Beide sind rechtwinklig und rechtsdrehend.
Die Richtungsvektoren des KS_neu liegen bezogen auf das
KS_alt vor. Der Ursprung ist identisch, es handelt sich also
um reine Rotationen.
Innerhalb eines Berechnungsalgorithmus möchte ich nun unab-
hängig von der Lage des KS_neu eine eindeutige Eulermatrix
formulieren, mit der ich dann meine gewünschten Koordinaten-
Transformationen durchführen kann.
Nein. Du moechtest keine "Eulerwinkel" haben. Du moechtest einfach die
Koordinatentransformation wissen. Wenn Deine drei neuen Basisvektoren
V1, V2, V3 bez. der alten Basis die Koordinaten

x1 x2 x3
y1 y2 y3
z1 z2 z3

haben ( V_i ist jeweils die i. Spalte ), dann ist die Matrix für die
Koordinatentransformation einfach die transponierte Matrix

x1 y1 z1
x2 y2 z2
x3 y3 z3

Eigentlich ist es die Inverse der 1. Matrix, aber da es sich um eine
orthogonale Matrix handelt, ist die Inverse netterweise einfach die
Transponierte. Wie Du bemerkst, steht die Traonsformationsmatrix
bereits ohne jede Rechnung da ;-).

Man kann die Sache auch anders formulieren. Wenn V1,V2,V3 drei
paarweise orthogonale Einheitsvektoren sind und V ein beliebiger
Vektor, so sind die Koordinaten von V bezueglich dieser Basis einfach
die Skalarprodukte von V mit diesen Basisvekoren, d.h. es gilt

V = <V,V1>*V1 + <V,V2>*V2 + <V,V3>*V3

(Diese erfreuliche Tatsache, die das Leben so einfach macht, gilt
wohlgemerkt *nur* dann, wenn es sich um orthogonale Einheitsvektoren
handelt.)

Wenn Du eine Koordinatenspalte mit der zweiten Matrix multiplizierst,
bildest Du ja effektiv jeweils die Skalarprodukte der
Koordinatenspalte mit den Zeilen der Matrix. Und da die Zeilen der 2.
Matrix die Spalten der 1. Matrix sind, bildest Du bei der
Multiplikation also einfach die Skalarprodukte der Koordinatenspalte
des Punkts bez. des 1.KS mit den Koordinatenspalten der neuen
Basisvektoren bez. des 1.KS.

MfG
Horst
Loading...