Matrizenmultiplikationen

Neue Frage »

cadguru Auf diesen Beitrag antworten »
Matrizenmultiplikationen
Meine Frage:
Hallo Leute,

ich habe ein Verständnisproblem mit der Matizenmultiplikation.
Ich möchte Punkte mit Hilfe von Matrizen (homogene Koordinaten) bearbeiten, die ich mit verschiedenen Transformationen bewegen will.

Ich habe verschiedene Funktionen geschrieben (Rotation, Translation, Skalieren, Spiegeln), die mir die Transformationsmatrizen erzeugt, wovon jede einzelne funktioniert (zumindest die Ergebnisse decken sich mit meinen Erwartungen).

Ich habe Matrizen gewählt weil ich die Transformationen zusammenfassen und kombiniert anwenden kann.

Allerdings erhalte ich bei der Kombination einzelner Transformationen gänzlich idiotische Ergebnisse.

Ich habe inzwischen meine Ergebnisse mit einem Online-Matrizenrechner kontrolliert und lande ebenfalls nicht an den richtigen Punkten.

Sorry für die Menge an Text, ich hätte nicht gewußt, wie ich es anders (kürzer) hätte schreiben sollen...

tia

Sebastian



Meine Ideen:
Folgender Ansatz:

Ich möchte eine Linie von P1(200, 0, 0) nach P2(300, 0, 0) um den Punkt P1 um 90° drehen.
Es sollten also für P1 die Koordinaten 200, 0, 0 und für P2 die Koordinaten 200, 100, 0 herauskommen.

Wenn ich den Matrizenrechner als richtig ansehe (ich zweifle inzwischen an meinen Routinen), komme ich aber auch nicht auf die entsprechenden Punkte.

Folgendes tun/sollten meine Routinen tun:
Translation um den Drehpunkt in den Ursprung zu bekommen, Rotation um den Ursprung, Translation zurück

Translation (-200, 0, 0) ->
Rotation (90°) ->
Translation zurück (200, 0, 0) ->

Wenn ich die Punkte jeweils einzeln transformiere passt alles wunderbar, allerdings schaffe ich es nicht, die kombinierte Matrix zu erstellen...
Die kombinierte Matrix (lt. http://rechneronline.de/lineare-algebra/matrizen.php) liefert:


was meine Punkte von P1(200, 0, 0) nicht auf P1'(200, 0, 0) sondern auf P1'(0, 200, 0) bringt, ähnliches bekomme ich für P2. Ich finde keinen Fehler und hoffe auf euer Fachwissen...
Elvis Auf diesen Beitrag antworten »

Das kann nicht funktionieren, weil eine Translation keine lineare Abbildung ist. Also ist eine Translation nicht durch eine Matrix darstellbar. Eine Translation um einen Vektor, der nicht der Nullvektor ist, verschiebt den Nullpunkt. Im Vektorraum gilt aber für jede lineare Abbildung .

Translationen gehören zur Gruppe der Bewegungen, das ist eine Untergruppe der affinen Abbildungen.
cadguru Auf diesen Beitrag antworten »

Hallo Elvis,

danke für die Antwort. Aus diesem Grund arbeite ich mit homogenen Koordinaten in einer 4x4 Matrix statt der für die Rotation ausreichenden 3x3 Matrix (siehe auch www .uni-forst.gwdg.de/~wkurth/cg08_v03.pdf, Link modifiziert sonst kann ich ihn nicht angeben)

tia

Sebastian
Elvis Auf diesen Beitrag antworten »

Die Matrizen kann man nacheinander auf die Vektoren anwenden, dann stimmt das Ergebnis. Auch in den im Skript angegeben Beispiel kann man die einzelnen Schritte ausführen, aber man kann nicht das Matrixprodukt auf den ersten Vektor anwenden.

In dem was Du machst finde ich keinen Fehler. Auch wenn man die Translationen in der anderen Richtung macht (das habe ich irgendwo gelesen, dass der Ursprung vor der Drehung in den Drehpunkt verschoben werden soll), kommt genau das gleiche Matrixprodukt heraus.

Es passt nicht, obwohl es passen sollte. Ich passe.
Captain Kirk Auf diesen Beitrag antworten »

Die "kombinierte Matrix" hat die Vorzeichen vor 200 vertauscht.

Ich vermute du hast die Reihenfolge der Matrzenmultiplikation vertauscht:
Deine oberste Matrix ist die rechte Matrix (sie wird zuerst angewandt)
cadguru Auf diesen Beitrag antworten »

Hallo Captain,

danke für die Antwort. Allerdings ist mir noch nicht ganz klar, wo mein Fehler liegt. Da du die Reihenfolge der Operationen anzweifelst (und ich inzwischen alles anzweifle) kannst du mir vielleicht sagen, welche meiner Routinen daneben geht?

Der Ablauf sieht so aus: Ich erstelle eine Einheitsmatrix und wende die Translation darauf an (gibt die erste Matrix, nennen wir sie T1), danach erstelle ich eine Einheitsmatrix und wende die Rotation darauf an (T2). Zuletzt wieder eine neue Matrix T3 für die Rücktranslation. Mir ist klar, dass ich nicht willkürlich die Richtung wechseln kann, allerdings ist mir die Reihenfolge der Multiplikationen nicht klar. Kannst du mir das erklären?

tia

Sebastian
 
 
Captain Kirk Auf diesen Beitrag antworten »

Zitat:
Da du die Reihenfolge der Operationen anzweifelst (und ich inzwischen alles anzweifle) kannst du mir vielleicht sagen, welche meiner Routinen daneben geht?

Was ich vermute hab ich bereits gesagt.
Was genau daneben geht kann ich ohne meine Glaskugel nicht sagen, da du dich über genau diesen Teil auschgweigst:
In welcher Reihenfolge multiplizierst du die Matrizen?


Und was sollen die ganzen Einheitsmatrizen in der Beschreibung? Wenn du multiplizierst, und davon gehe ich aus, sind die vollkommen überflüssig.

Zitat:
Der Ablauf sieht so aus:

Ganz ehrlich: Das ist schwammig genug um nicht falsch zu sein. Ich kann daraus keine definitve Vorgehensweise erkennen.

Es geht hier eigentlich nur darum welche Matrizen du wie multiplizierst.
Elvis Auf diesen Beitrag antworten »

Noch einmal in aller Ruhe rechnen ...

und dann ist , die Koordinaten für die Bilder der Punkte P1 und P2 stimmen, und die Welt ist wieder in Ordnung.

Es ist aber nicht egal , ob man den Drehpunkt vor der Drehung in den Ursprung oder den Ursprung in den Drehpunkt schiebt. Nur das erste ist richtig. Prost
cadguru Auf diesen Beitrag antworten »

Hi Elvis,

danke für die ausführliche Erklärung. Ich habe nochmal meinen Code kontrolliert und gesehen, dass ich wegen Compilermeldungen die Routine zum Kombinieren von Matrizen zweimal hatte, wobei die eine richtig A*B gerechnet hat, die andere B*A und da ich bei der kombinierten Matrize intelligenterweise beide angesprochen habe, kam das Chaos zustande. Ich habe jetzt die Routine umgestellt und das Duplikat eliminiert (und wieder die Unit-Tests durchlaufen lassen), jetzt passt alles. Danke für die Geduld...

Sebastian

PS: Bei Interesse kann ich meine Routinen gern posten, ich dachte nur, dass das ziemlich umfangreich wird...
Neue Frage »
Antworten »



Verwandte Themen

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