|
A.K. |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.11.2008, 08:53
Titel: Rotationsmatrix
|
 |
|
 |
|
Morgen,
ich habe zwei kleine Probleme bei der Nutzungvon Rotationsmatrizen.
Problem 1)
Ich meinem Programm sollen die Rotationen von Segmenten zunächst berechnet werden. Dies geschieht folgendermaßen:
a_alpha=[take( :,2),take( :,3)];
a_beta=[take( :,1),take( :,3)];
a_gamma=[take( :,1),take( :,2)];
alpha(i,: )=subspace(a_alpha(i,: )',a_alpha(i+1,: )');
beta(i,: )=subspace(a_beta(i,: )',a_beta(i+1,: )');
gamma(i, : )subspace(a_gamma(i,: )',a_gamma(i+1,: )');
a_alpha usw. sind y-z, x-z und x-y Koordinaten eines Punktes in einem 3d Raum.
alpha usw. sind die jeweiligen Winkel (x,y,z) zwischen zwei Vektoren (in meinem Fall soll die Rotation zwischen Bild i+1 und Bild i berechnet werden - die Schleife habe ich hier einmal weggelassen)!
Nun zu der Rotationsmarix, die ich aus einschlägiger Quelle entnommen habe:
rx = [1 0 0;0 cos(alpha(i,: )) sin(alpha(i,: ));0 -sin(alpha(i,: )) cos(alpha(i,: ))];
ry = [cos(beta(i,: )) 0 -sin(beta(i,: ));0 1 0;sin(beta(i,: )) 0 cos(beta(i,: ))];
rz = [cos(gamma(i,: )) sin(gamma(i,: )) 0;-sin(gamma(i,: )) cos(gamma(i,: )) 0; 0 0 1];
rotation = rx*ry*rz;
diese sollte so auch stimmen.
Meine erste Frage, habe ich die Winkel korrekt zugeordnet?? rx dreht um die x-Achse ... der Winkel alpha berechnet sich aus der Veränderung der y-z Koordinaten meines Punktes.
Problem 2) (eventuell liegt der fehler ja auch bei problem 1)
Nun möchte ich alle Punkte i wieder auf den ersten Punkt zurückdrehen. Dies mache ich folgendermaßen:
a_rot_controll(i,: )=a_trans_controll(i+1,: ) *rotation;
wobei a_trans_controll die zurücktransformierte variable nach translation (klappt einwandfrei) ist.
Wäre super, wenn mir jemand helfen könnte. Ich denke, dass in Problem 1 der Fehler liegt, da ich mir nicht ganz sicher bin, ob ich die Winkel richtig zugeordnet habe.
VIELEN DANK!!![/b]
|
|
|
|
|
dib0r |

Forum-Guru
|
 |
Beiträge: 413
|
 |
|
 |
Anmeldedatum: 09.05.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.11.2008, 10:58
Titel:
|
 |
Hallo,
die Rotationsmatrizen sind soweit in Ordnung, nur dass deine Winkel in die falsche Richtung zeigen (bei Rechtssystemen ist die "richtige" Richtung gegen den Uhrzeigersinn). Ansonsten müsstest du das Vorzeichen vor dem Sinus umdrehen (cos(-x) = cos(x); sin(-x) = -sin(x)). (Ich habe gerade bemerkt dass so wie du es machst, eigentlich doch stimmt weil du ja die Winkeldifferenz andersrum berechnest - i-(i+1) anstatt (i+1)-i).
Bedenke allerdings dass deine Rotationen einer gewissen Sequenz unterzogen sind. So ist rx*ry nicht gleich ry*rx.
Warum schreibst du eigentlich immer (i, für den Winkelindex? (i) müsste reichen da die Winkel Skalare sind.
Den Befehl subspace habe ich noch nie verwendet, Winkel berechne ich eigentlich immer über den tangens (atan, atan2), wobei subspace natürlich auch funktionieren sollte.
Inwiefern äußert sich der Fehler? Hast du es mal mit ganz einfachen Werten versucht?
MfG
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|