Drehung einer Matrix im Raum

#2389603
Lesenswert?

Hallo,

Ich habe ein dreidimensionales Volumen als Matrix von Binärwerten. Darin 
befindet sich ein zylindrisches/kegelförmiges Objekt, mittig, aber in XZ 
und YZ Ebene gedreht, also schief. Ein Beispielbild hängt an.
Für die Länge des Objekts will ich jetzt an jeder Stelle den Durchmesser 
bestimmen, sowie Fläche und Rundheit.

Die erste Herangehensweise wäre, das Objekt parallel zur Z-Achse drehen, 
und dann für jede Slice die Paramter zu bestimmen: Dafür habe ich den 
Drehwinkel in den beiden Ebenen bestimmt, und nacheinander um diese 
Winkel die Matrix gedreht. Und in diesem Moment stoße ich an ein 
Problem: da Matrixmultiplikationen nicht kommutativ sind, führt die 
Drehung um diese Winkel nicht zu einem Objekt, welches gerade im Volumen 
steht. Durch die erste Drehung, drehe ich nicht nur das Objekt, sondern 
auch das Koordinatensystem mit. Daher versagt die zweite Drehung.
Wie kann ich das Problem lösen? Nur um eine Achse drehen, dann den 
Winkel neu bestimmen? Um beliebige Achse im Raum drehen? Da steige ich 
durch die Mathe nicht durch...
Gibt es vielleicht eine andere Herangehensweise? Beispielsweise eine 
virtuell gedrehte Slice aus dem Volumen zu berechnen, statt das ganze 
Volumen zu drehen?

Danke für Eure Hilfe!
Angehängte Dateien:
#2389639
Lesenswert?

Versteh ich dich richtig, dass du die echte Achse deines Objektes kennst 
und du diese jetzt auf die z-Achse drehen willst? Oder willst du die 
Achse des Objekts bestimmen? Wenn du die Achse hast: in welcher Form ist 
sie denn gegeben?

Edit:
noch mal nachgedacht: Das erzeugen einer virtuellen Slice durch dein 
Gebilde bedeutet, dass du die Voxel-Positionen in eine Ebene 
projizierst. Dafür musst du ein lokales Koordinatensystem definierten, 
in dem eine Achse in der Achse des Objekts liegt. Wenn du dieses 
Koordinatensystem bestimmt hast, hast du auch die gesuchte Drehmatrix 
gefunden, d.h. mathematisch macht es keinen Unterschied, ob du den Raum 
drehst oder die Schnittebene.
Gast #2390026
Lesenswert?

In der 3D-Computergraphik werden zur Rotation neben
den Std.Rotationsmatrizen Quaternionen eingesetzt.
In der Anwendung eigentlich sehr einfach, aber die
Theorie dahinter ein wenig komplex.
Vereinfacht ist ein Quaternion ein skalierter Vektor
(um den gedreht werden soll) um einen vieten Wert
ergänzt  (= 2X Drehwinkel). Falls du Windows hast:
Schau mal in der Direct3D-SDK nach, die enthält alle
notwendigen Umrechnungen. Oder schau mal in Wiki nach.
Es gibt insegsamt 3 Definitionen/Ableitungen, hoffe
eine davon ist für dich verständlich.

=> Ansatz: erster Vektor+Winkel rotiert Achse in
eine Ebene, zweiter Vektor+Winkel rotiert dann die
Achse auf die Zielachse.

Viel Spass
#2390123
Lesenswert?

Hmm, interessant. Danke. Irgendwie wäre eine Seite schön, auf der das 
ganze in matlab beschrieben wird. Da habe ich das nur für Drehungen in 
den Achsen selbst gefunden, und das habe ich ja schon/ macht Probleme. 
Das ganze soll noch für einen Kongressvortrag fertig werden und da stehe 
ich etwas unter Zeitdruck und habe keine Zeit mehr, mich so tiefgründig 
damit zu beschäftigen, wie ich das gern tun würde...
#2390350
Lesenswert?

Hallo nochmal. Ich mache es jetzt so, dass ich erst um die eine Achse 
drehe. Damit richte ich die Struktur aus, und ändere den Winkel in der 
zweiten Dimension. Dann bestimme ich den neu und drehe um die zweite 
Achse. Da nun der Winkel in der ersten Dimension 0 ist, wird er auch 
nicht mit verzerrt. Da löst zwar ncht das Problem der kardanischen 
Blockade, aber meine Strukturen richten sich auf und ich kann die 
Paramter ausreichend genau bestimmen.
Eure Ideen waren sehr hilfreich, danke. Wenn ich Zeit habe, gehe ich das 
alles nochmal durch. Wenn jemand eine Quelle im NEtz oder in Büchern 
kennt, wo das alles mal für die Dummen beschrieben ist, wäre ich 
trotzdem sehr, sehr dankbar!

Grüße,
jc
Gast #2390673
Lesenswert?

Einen richtig guten Link habe ich nicht (Wiki liefert
hier nicht das Sahnehäupchen), aber ein PDF mit einer
kurzen Einführung (geometrisch motiviert):

http://campar.in.tum.de/twiki/pub/Chair/DwarfTutorial/quatut.pdf

Mach dir einfach nur klar, was die ersten 3 Komponenten
eines Einheitsquaternion machen (legen Rotationsachse fest)
und wie die Relation zur vierten Komponente ist (darüber
wird der Rotationswinkel festgelegt). Dann muss du nur noch
dir im klaren sein, wohin du drehen willst und wie du die
Rot.Achse berechnest (z.B. per Kreuzprodukt).

Viel Spass


P.S. deine Aufgabenstellung ist extrem lückenhaft. Sind z.B.
die Rotationswinkel bekannt oder unbekannt (dann muss die
Rotation manuell bestimmt werden oder ein komplexer Algo
aus z.B. Bilderkennung muss die Grundebenen etc. finden
-- puh --)...
Gast #2390813
Lesenswert?

Jedes gute Studium beginnt mit einer recht einfachen
Lektion: Verwende niemals das Wort "Trivial" (siehe
Anekdoten zu "trivial"..).
Speziell zur Rotation: Eine Rotation ist einfach zu
verstehen, mehrere verursachen wegen der fehlenden
Kommutativität schnell Konfusionen.

Frag dich also lieber mal selber: wer ist hier der
Troll!!
#2391011
Lesenswert?

Auch infinitesimale Drehungen kommutieren nicht. Sorry. Die Reihenfolge 
muss vorgegeben werden. zB wie bei den Eulerwinkeln.

Trivial bedeutet man kann sich eine Euler Matrize ais einer planaren 
Dreheung herleiten. Aber der Poster hat ja keine Zeit vor dem Vortrag. 
Dann sollte er zumindest faehig sein diese 3D Drehmatrize per Gurgel zu 
ersuchen. Die steht sicher irgendwo am Stueck. Ein Minimum an Linearer 
Algebra sollte bekannt sein fuer sowas. Zb die Eigenschaften einer 
Drehmatrix, zB Determinante gleich Eins und so.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren