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!
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.
j. c. schrieb: > Um beliebige Achse im Raum drehen? Da steige ich > durch die Mathe nicht durch... Normalerweise verschiebt man das Objekt zunächst in den Nullpunkt des Koordinatensystems, dreht um die gewünschte Achse und verschiebt dann zurück.
Genau, so habe ich das auch gemacht. Meine Frage ist nur, wie mache ich das mit der Drehung genau? Ich habe die Achse des Objekts nicht wirklich, sondern bestimme sie nur aus den Mittelpunkten der Querschnitte entlang der Z-Achse (das Objekt hat nicht mehr als 45° Neigungswinkel und ändert sich relativ stetig über die Länge).
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
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...
Dann hau doch hier mal rein was du hast + Beschreibung was du dir anders vorstellst, eventuell kann dir jemand helfen... Manchmal hat man auch nur die Reihenfolge der Operationen vertauschst etc...
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
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 --)...
>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...
Der Troll. Rotationen sind eher was Triviales. Wenn man's nicht
geschnallt hat, sollte man auch keinen Vortrag drueber halten...
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!!
Mach die Drehungen infinitessimal, dann klappt das auch mit der Kommutativität. Die Eulerschen Winkel wären eine Möglichkeit zur Beschreibung der Lage.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.