Folge von Matrizenmultiplikationen

Neue Frage »

Stag Auf diesen Beitrag antworten »
Folge von Matrizenmultiplikationen
Hallöchen =)

Mein Mathe-Problem steht in Verbindung mit grafischer Programmierung in OpenGL.

Die Aufgabe ist es einen Baum aus 4 Quadern zu erstellen, dabei stellt der erste Quader den Stamm dar, die 3 Anderen sind Äste, der Erste mit zRot 60°, die anderen Beiden dann zudem 120° und 240°.
Das Dingens in OpenGL zu programmieren hat geklappt, sonst wäre ich wohl auch nicht im Mathe-Forum unterwegs : P

Mein Problem ist nun, die 6 höchsten Punkte der Äste zu berechnen.
Ich habe schon einige Ansätze probiert, doch irgendwie komme ich nicht auf die Einheitsmatrix mit der ich dann die Punkte multiplier.

Hier noch allgemein Infos. Die Äste fangen beim Ursprung an, dh für mich das ich erstmal ein Einheitswürfel in der mitte aller 3 Achsen habe, denn Stamm jetzt nicht mit einbezogen, da dieser ja nach unten verschoben wird, so dass die Äste auch auf dem Ursprung liegen. 1. Ast 60° z, 2. Ast 60° z und 120° y, 3. Ast 240° y. Zudem wird der Einheitswürfel auf 2|4|2 skaliert und muss nach der Rotation auch verschoben werden, damit er richtig an der Spitze des Stamms sitzt. Ich hoffe ich konnte das Szenario halbwegs erklären.

Wenn ich nun meine beiden erste Punkte haben, nehmen wir 1|1|1 und 1|1|-1, was ja die beiden Eckpunkte des Würfels wären, die nach der Skalierung und Rotation die gesuchten Punkte des ersten Ast sind und diese mit der errechneten Einheitsmatrix multipliziere, erhalte ich die gesuchten Punkte P`. Nun komme ich aber nicht so wirklich auf meine Einheitsmatrix.

Meine bisherigen Ansätze:
1. Ansatz ohne Skalierung mit manuell ermittelten Punkten, heist, mit Skalierung von 2|4|2 auf den Einheitswürfel sind die PUnkte für die Multiplikation 1|2|1 und 1|2|-1 wenn ich das richtig sehe. Um nun noch die Einheitsmatrix auszurechnen rechne ich zRot-Matrix mit 60° mal die Translationsmatrix damit der Ast oben auf dem Stamm sitzt. Mit dieser Errechneten matrik multiplizieren ich nun noch die oben genannten PUnkte. Dann wäre das meiner Meinung nach soweit komplett, nur habe ich leider keine passende Ergebnisse heraus T_T

Selbe Spiel wäre ja dann noch mit der 2. Rotmatrix hintendran, also erste die ersten Beiden ausmultiplizieren, mit dieser errechneten Matrix dann noch die 2. rotmatrix multiplizieren.

2. Ansatz mit Skalierungsmatrix
Wie der Ansatz aussah kann man sich sicherlich vorstellen. Meine Punkte sind 1|1|1 und 1|1|-1, Einheitsmatrix dann Skalierungsmatrix * Rotationsmatrix * Translationsmatrix. Aber auch hier kommt iwi nix brauchbares raus. Entweder Werte größer der Länge der Äste oder negative statt positiver Werte für Äste, welche sich im positiven X-Bereich aufhalten.

Meine Vermutung liegt darin, dass ich die Einheitsmatrix falsch berechne, da das Verfahren hier ja nicht kommutativ ist.

Sooo, denn bin ich mal auf Eure Vorschläge gespannt : D
frank09 Auf diesen Beitrag antworten »
RE: Folge von Matrizenmultiplikationen
Du kannst eine Drehung und eine anschließende Translation nicht durch Multiplikation mit einer Matrix darstellen. Für eine Drehung multiplizierst du mit der Drehmatrix, die anschließende Translation erfolgt durch Addition des Verschiebevektors.
Stag Auf diesen Beitrag antworten »
RE: Folge von Matrizenmultiplikationen
Vielen Dank für Deine Antwort =)
Ich bin mir aber recht sicher, dass es möglich ist, eine Rotationsmatrix und eine Translationsmatrix zu multiplizieren - damit berechne ich dann die Matrix, die ich mit dem Punkt multipliziere, von dem ich die Position nach der Transformation haben möchte.

In diesem PDF steht es eigentlich auch so drinne, oder hab ich da was falsch verstanden ? (auf seite 7)
Transformation

Habe das Ganze auch mal durchgerechnet und es kommen auch recht annehmbare Ergebnisse raus.

Habe dann diese neu errechneten Punkte abermals mit der zweiten Rotationsmatrix multipliziert um auch die restlichen Punkte zu ermitteln, auch dort kommen passende Ergebnisse heraus Big Laugh

Trotzdem muss es doch möglich sein, gleich die gesuchte Transformationsmatrix zu ermitteln so dass ich nicht mit den Punkten des ersten Asts rechnen muss, weil es ja nur in diesem Fall glücklicherweise aufgeht, bzw. müsste ich ja sonst immer erst die Punkte ausrechnen und dann diese wieder Transformieren.

Hier nochmal ein Bild das den Sachverhalt darstellt, die 6 Punkte oben an den 3 Quadern sollen errechnet werden.


Bild angehängt, externen Link gelöscht. Steffen

Ansonsten ist soweit ja alles OK, habe passende Ergebnisse =)

Nochmals vielen Dank für Deine Antwort, ich gebe zu, dass ich den Sachverhalt oben etwas doof erklärt habe =)

MfG
Stag
frank09 Auf diesen Beitrag antworten »
RE: Folge von Matrizenmultiplikationen
Wenn man von 3 auf 4 Koordinaten erweitert, kann man die Translation in die Matrix einbauen.

Dein Bild passt aber nicht mit
Zitat:
1. Ast 60° z, 2. Ast 60° z und 120° y, 3. Ast 240° y

überein.

Ich sehe 3 Quader, die aus dem gelben wie folgt hervorgehen:

(Matrix A) Zunächst Drehung 60° um die blaue Achse, dann Verschiebung (1 Einheit nach oben|1 Einheit nach links).

(Matrix B) Zuletzt werden sie ca. 30°(rot), 150°(grün) und 270° (blau) um die grüne Achse gedreht. Daraus ergibt sich auch die Achsensymmetrie.

Sei nun blau=x|rot=y|grün=z-Achse





Stag Auf diesen Beitrag antworten »

Sorry, hatte da einen Schreibfehler und auch einige Angaben vergessen wie ich gerade sehe.
1. Ast 60° z, 2. Ast 60° z und 120° y, 3. Ast 60° z und 240° y
Zudem hatte ich auch die genaue Translation von (-1.4, 2.3, 0.0) und die Skalierung des Einheitswürfels von (2,4,2) nicht angegeben >.<

Die Gradzahlen sind in der Aufgabe leider so vorgegeben und wurden auch so in den Quellcode übernommen. Der gelbe Quader ist um 4 Einheiten nach unten verschoben, so dass seine Spitze quasi am Achsenursprung ist. Der rote Quader wird dann direkt im Ursprung erzeugt, ist also direkt im Mittelpunkt des Koordinatensystems. Dieser wurde dann um 60° auf der blauen Aschse rotiert und danach um -1.4 Eineheiten nach links und 2.3 Einheiten nach oben verschoben.
Mit den beiden anderen Quadern wurde dasselbe gemacht und sie wurden danach um 120° (grüner Quader) und 240° (blauer Quader) um die grüne Achse rotiert.
Das gerenderte Ergebnis ist auf dem Bild zu sehen.

Ich bin die ganze Rechnung auch nochmal mit dem oben gennanten Vorschlag durchgegangen. Also erst die Rotationsmatrix ausrechnen und dann mit dem Vektor addieren, also den Vektoranteil der Matrix, wenn ich das so richtig interpretiert habe. Insgesammt kommen öfter mal Ergenisse raus die halbwegs zutreffend sind, nur eben in den wenigstens Fällen für alle 6 Punkte insgesamt.

Selbst wenn ich jetzt keine großen Matritzenregeln anweden, muss ich doch sogesehen nur meine Punkte (1,2,1) und (1,2,-1) mit der zRotationsmatrix multiplizieren, diese Ergebnispunkte dann mit der Translationsmatrix multiplizieren und dabei sollten zumindest erstmal die obersten beiden Punkte des roten Quaders rauskommen. Mit diesen Punkten rechne ich dann weiter und multipliziere sie jeweils mit der yRotationsmatrix um 120° um die Punkte des grünen Quaders zu erhalten und dann dieselbe Rechnung nochmal mit 240° um die des blauen Quaders zu erhalten.
So rein prinzipiell ist das doch richtig oder nicht ?

Und schonmal vielen Dank für deine bisherigen Mühen =)
frank09 Auf diesen Beitrag antworten »
RE: Folge von Matrizenmultiplikationen
Für deine Achsenbezeichnungen (rot=x|grün=y|z=blau) und Verschiebung(-1,4|2,3|0)
ergibt sich ausgehend von einem Quader im Ursprung




Du kannst für die entsprechenden Winkel einsetzen und mit (1|2|1) bzw. (1|2|-1) multiplizieren oder eben evtl. auch zur Kontrolle mit zRot, Translation, yRot berechnen.
 
 
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »