WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Rotationsmatrix

 

A.K.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2008, 09:53     Titel: Rotationsmatrix
  Antworten mit Zitat      
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

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2008, 11:58     Titel:
  Antworten mit Zitat      
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,Smile 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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.