Homogene Tranformation zwischen zwei Koordinatensystemen
-
Hi, ich will die homogene Transformation zwischen 2 Koordinatensystemen berechnen, weiß aber nicht wie ich das anstellen soll und habe bis jetzt auch noch nichts sonderlich hilfreiches im Internet gefunden.
Also ich habe 2 Koordinatensysteme gegeben, von diesen weiß ich jeweils den Ursprung(x1,y1,z1) und die 3 Achsen X(x2,y2,z2), Y(x3,y3,z3) und Z(x4,y4,z4).
Jetzt will ich die Transformation zwischen diesen beiden Koordinatensystemen berechnen.Wie ich die Translation bekomme kann ich mir noch erklären. Da würde ich einfach den Ursprung des 2. Koordinatensystems minus den Ursprung des 1. Koordinatensystems nehmen, aber wie bekomme ich die Rotationen um die x-, y- und z-Achse heraus.
Wäre toll wenn mir einer von euch bei meinem Problem helfen könnte, am besten mit einem kleinen Beispiel.
Vielen Dank schonmal!
-
google mal nach "rotationsmatrix".
ansonsten gibts da glaub ich noch die lorentzschen transformationsgleichungen.
-
Hallo,
ObdA Ursprung = (0,0,0)
dann transformiert eine multiplikation mit der matrix
[ X Y Z ]
einen vektor aus dem XYZ-System ins e1, e2, e3 - System (mit e1 = (1,0,0), e2 = (0,1,0) u.s.w.), wobei X, Y, Z die Komponentendarstellung der neuen Basisvektoren im e1..3 - System sind.
Das ist leicht zu sehen, wenn man bedenkt, dass ein Vektor mit der Darstellung
(1,0,0)_XYZ im XYZ-system den Vektor
1*X + 0*Y + 0Z
repräsentiert, während im e1..3 System
X_1*e1 + X_2*e_2 + X_3e_3
ist.Nach multiplikation von (1,0,0)_XYZ mit der matrix kommt gerade das gewünschte Ergebnis, analog für Y, Z (und alle linearkombinationen davon)
Das inverse einer orthogonalen Matrix ist ihr transponiertes, damit hast du mit
[ X_1 X_2 X_3 ] [ Y_1 Y_2 Y_3 ] [ Z_1 Z_2 Z_3 ]
die Rücktransformation.
Das ist auch klar, denn mit einem Skalarprodukt "." hast du
v = v_1 * X + v_2 * Y + v_3 * Z
=> v_1 = v.X
v_2 = v.Y
v_3 = v.ZUnd nichts anderes macht die obige Rücktrafomatrix.
-
Vielen Dank für die schnellen Antworten.
Aber da merk ich mal wieder das Mathe nicht so mein Ding ist, versteh nähmlich nur bahnhof! Oder ich habe mein Frage falsch formuliert.
Mich würde interessieren wie ich die Winkel(x, y und z-Achse) herausbekomme um die, das 1. Koordinatensystem gedreht werden muss um die selbe orientierung zu haben wie das 2. Koordinatensystem, angenommen sie haben den gleichen Ursprung.
Gruß smilingman
-
smilingman schrieb:
Vielen Dank für die schnellen Antworten.
Aber da merk ich mal wieder das Mathe nicht so mein Ding ist, versteh nähmlich nur bahnhof! Oder ich habe mein Frage falsch formuliert.
Mich würde interessieren wie ich die Winkel(x, y und z-Achse) herausbekomme um die, das 1. Koordinatensystem gedreht werden muss um die selbe orientierung zu haben wie das 2. Koordinatensystem, angenommen sie haben den gleichen Ursprung.
Gruß smilingman
Hallo,
winkel sind böse. was du machen willst, ist
vneu_1 = v_1 * X_1 + v_2 * Y_1 + v_3 * Z_1 vneu_2 = v_1 * X_2 + v_2 * Y_2 + v_3 * Z_2 vneu_3 = v_1 * X_3 + v_2 * Y_3 + v_3 * Z_3
-
smilingman schrieb:
Aber da merk ich mal wieder das Mathe nicht so mein Ding ist, versteh nähmlich nur bahnhof! Oder ich habe mein Frage falsch formuliert.
du hast sicherlich irgendwo code fuer eine 'lookat' matrix (notfalls danach goooglen)
erstelle fuer beide transformationen soeine matrix.
dann multiplizierst du die inverse der einen mit der (nicht inversen) zweiten und hast eine matrix mit der du aus dem einen raum in den anderen transformieren kannst.
-
Danke Rapso,
das ist mal eine Antwort mit der ich was anfangen kann.
Werd ich gleich mal ausprobieren.Gruß smilingman
-
mal als ergaenzung:
falls die achsen deines koordinatensystems nicht orthogonal sind und auch so bleiben sollen, solltest du in der 'lookat' funktion die kreuzprodukte rausnehmen. falls die laenge der achsen nicht 1 sein soll, solltest du auch die normalisierung rausnehmen. (ja, am ende bleibt nicht viel mehr uebrig als die vektoren in die matrix zu kopieren).falls du validieren willst, ob deine matrix richtig ist, kannst du die 3achsen des einen systems transformieren und es sollten exakt die 3 achsen des zielsystems rauskommen (bis auf ein paar float ungenauigkeiten).