AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Rotationsmatrix

Ein Thema von Boyington · begonnen am 14. Mai 2012 · letzter Beitrag vom 14. Mai 2012
Antwort Antwort
Benutzerbild von Boyington
Boyington

Registriert seit: 12. Apr 2012
43 Beiträge
 
#1

Problem mit Rotationsmatrix

  Alt 14. Mai 2012, 12:02
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
Do the best job, leave the rest in the hands of God!

Geändert von Boyington (14. Mai 2012 um 12:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Rotationsmatrix

  Alt 14. Mai 2012, 13:29
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?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Boyington
Boyington

Registriert seit: 12. Apr 2012
43 Beiträge
 
#3

AW: Problem mit Rotationsmatrix

  Alt 14. Mai 2012, 15:17
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!
Do the best job, leave the rest in the hands of God!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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