Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Problem mit Rotationsmatrix (https://www.delphipraxis.net/168295-problem-mit-rotationsmatrix.html)

Boyington 14. Mai 2012 11:02

Problem mit Rotationsmatrix
 
Morgen Leute,
in meinem Programm ist ein Blickpunkt im Raum immer fest(z.B mit Koordinaten (0,0,3)), drüben liegt ein 3D-Bauteil, aber der kann im Raum rotieren OHNE Translation (die Mitte des 3D-Bauteil liegt immer direkt auf dem Koordinatenursprung, also Position von diesem 3D-Objekt ist (0,0,0)).

Meine Aufgabe: Abstände zwischen diesem Blickpunkt (0,0,3) und allen Punkten vom 3D-Bauteil NACH DER ROTATION zu berechnen!

Wenn ich diesen 3D-Objekt zuerst um X-Achse um Winkel u, dann um Y-Achse um Winkel v, danach um Z-Achse um Winkel w drehe, um die neue Koordinaten von jedem Punkt des 3D-Objektes wieder zu berechnen, ist es ganz klar, folgende Rotationsmatrix zu verwenden (Multiplikation von Rotationsmatrix und Vektor des Punktes des rotierten 3D-Bauteils):

R=
|CwCv CwSvSu-SwCu CwSvCu+SwSu|
|SwCv SwSvSu+CwCu SwSvCu-CwSu|
|-Sv CvSu CvCu |
(C:Cos S:Sin)



Nun Problem ist:
Ich möchte diesen 3D-Bauteil FEST machen, aber lasse ich den Blickpunkt (0,0,3) um X,Y,Z-Achse um bestimmt. Winkel rotieren zu GLEICHER WIRKUNG, also natürlich zu gleicher relativer Position zu 3D-Bauteil wie vorher, damit bleiben die Abstände zwichen diesem rotierten Blickpunkt und allen Punkten vom festen 3D-Bauteil GLEICH wie vorher: Blickpunkt (0,0,3) fest, 3D-Bauteil rotiert.

Um die neue Koordinaten von rotiertem Blickpunkt nach Winkel u, v, w zu berechnen, brauche ich eine NEUE Rotationsmatrix, das ist ganz anders wie oben genannt.

Meine Frage: wie bekomme ich diese neue Rotationsmatrix?

Ein Bsp.:
Blickpunkt (0,0,3) ist fest,
1) 3D-Bauteil rotiert zuerst um X-Achse um +30 Grad (im Gegenuhrzeigersinn)
2) dann um Y-Achse +60 Grad
3) am Ende um Z-Achse +45 Grad.

Das entspricht folgende Rotation zu gleicher Wirkung (zu gleicher relativer Position):

3D-Bauteil ist fest,
1) Blickpunkt (0,0,3) rotiert zuerst um X-Acse um -30 Grad
2) dann um eine Achse um -60 Grad. (Der Richtungsvektor von dieser Achse ist (0,Wurzel 3,-1))
3) anschließend rotiert der Blickpunkt um sich selbst um -45 Grad

Das Problem sieht kompliziert aus, deshalb hätte ich gerne die Antwort oder Hinweise von euch

Vielen Dank

l.g Lee

Uwe Raabe 14. Mai 2012 12:29

AW: Problem mit Rotationsmatrix
 
Ich bin mir nicht sicher, ob ich dich richtig verstanden habe, aber ist die gewünschte Matrix nicht das Inverse der von dir beschriebenen R-Matrix?

Boyington 14. Mai 2012 14:17

AW: Problem mit Rotationsmatrix
 
Danke für die Antwort,Raabe!

Ich möchte nun das Problem leicht machen, auf vorherigen Versuch möchte jetzt verzichten, also lieber neue Eckpunkte-Koordinaten aller Dreicken vom 3D-Bauteil direkt mit folgender Rotationsmatrix mal berechnen (Der 3D-Bauteil ist aus einer STL-Datei, die Koordinaten der Eckpunkte aller Dreiecken vom diesem 3D-Bauteil werden in dieser STL-Datei gespeichert).

R=
|CwCv CwSvSu-SwCu CwSvCu+SwSu|
|SwCv SwSvSu+CwCu SwSvCu-CwSu|
|-Sv CvSu CvCu |
(C:Cos S:Sin)


Nun eine Frage an euch: gibt es in GLScene solche Befehle, mit den ich mit der Rotationsmatrix (schon bekannt) die neuen Koordinaten der Eckpunkte aller Dreicken vom 3D-Bauteil (STL-Datei) direkt berechnen kann?

PS: um die STL-Datei in GLScene zu laden und zu zeichnen, kann man folgende code verwenden

GLFreeForm1.LoadFromFile(xxx.stl);
GLFreeForm1.Scale.Scale(1);
GLFreeForm1.Roll(0);
GLFreeForm1.Turn(0);
GLFreeForm1.Pitch(0);

nochmals vielen Dank!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz