Verfasst am: 07.04.2008, 07:42
Titel: Drehmatrix um beliebige Drehachse
Hallo,
ich schildere erst mal mein Ziel und dann meine zwei Probleme .-)
Mir sind mehrere Punkte gegeben und eine Drehachse im Raum. Alles natürlich beliebig. Der Ursprung des KOS liegt auch irgendwo. Diese Punkte sollen nun um diese Drehachse um einen beliebigen Winkel gedreht werden.
Variante 1.
Ich hatte über Hilfsebene und Schnittpunkt den Abstand des Punktes zu meiner Gerade bestimmt usw. Allerdings hatte das nur für das ebene Probleme und nicht den R3 funktioniert.
Variante 2.
Ich habe mir bei Wiki noch mal die Sache mit den Drehmatrizen angesehen und fand dassei dei beste Lösung. Dort gibt es auch eine DM für eine beliebige Drehachse, aber bei mir erfolgt die Drehung nicht über diese Gerade sondern nur parallel dazu. Der Drehursprung ist nach wie vor [0,0,0]. Wie kann ich diese Drehung in meine Drehachse verschieben? oder sogar dort ausführen?
Code:
function[ newPoint ] = calcRotation( P, U, V, alpha ) % Berechnet die Drehung eines Punktes P um eine beliebige Gerade mit den % Zwei Punkten U und V bzw dem daraus resultiernenden Richtungsvektor R
% Richtungsvektor, normiert
R = V - U
R = R / norm(R)
Aber leider funktioniert dieses auch nicht. Ich vermute mal, dass an der "Achse" liegt. Allerdings erläutert die Hilfe nicht was unter ax, ay, und az verstanden werden muss. Ich hatte es so interpretiert, dass ich für ax bis az die komponenten meines nomierten Richtungsvektors R nehme, welcher sich aus den beiden Punkten U und V bildet (R = U-V);
hgtransform verstehe ich auch...
Code:
function[ newPoint ] = calcRotation( P, U, V, alpha )
% Richtungsvektor, normiert
R = V - U;
R = R / norm(R);
alpha_rad = alpha*(pi/180);
Ra = makehgtform('axisrotate',[R(1),R(2),R(3)],alpha_rad)
Vielleicht kann mir jmd jetzt weiterhelfen. Ich bin ein-zwei-Schritte weitergekommen aber so richtig rund läuft es noch nicht.
hgtranform habe ich erstmal aussenvor gelassen, da für mich nicht ersichtlich war, wie diese Transformation zum Berechnen des neuen Punktes nüzlich sein kann
Ich stütze mich zur Zeit auf die Anleitung von hier - Rotation um eine beliebige Achse - wobei allerdings die dort Beschreibene Verkettung der Rotationsmatrizen durch die Matlab-Funktion
Code:
Ra = makehgtform('axisrotate',[R(1),R(2),R(3)],alpha_rad);
Kurze Zusammenfassung. Rie Rotationsachse muss in den Ursprung tranformiert werden, über Txyz(-P), Rotiert werden über Ra und dann zurück transfomiert werden über Txyz(+P) - aber leider scheint es einen Fehler zu geben. Die Rotation erfolgt immer noch um NULL und nicht um die Drehachse. Kann mir bitte einer Weiterhelfen?
grüße
Code:
function[ newPoint ] = calcRotation( P, U, V, alpha ) % Berechnet die Drehung eines Punktes P um eine beliebige Gerade mit den % Zwei Punkten U und V bzw dem daraus resultiernenden Richtungsvektor R
% Richtungsvektor, normiert
R = V - U
R = R/sqrt(dot(R,R))
Die Gerade müsste, um das richtige Ergebnis zu haben, parallel-Verschoben sein so dass B und V identisch sind. Die Gleichung müsste hierfür Richtig sein aber ich verstehe nicht warum sich nichts ändert bzw ich vermute dass es daran liegt, dass sich durch die Drehung der zu rotierende Punkt auch eine Translation erfährt und demnach mit der ZUrücktranslation zu weiter transformiert wird...oder so [/img]
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
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.