Matrizenrechnung

Hallo,

ich versuche gerade einen Einstieg in die 3D-Programmierung zu bekommen und bin auf eine eher simple Sache gestoßen. Leider habe ich vergessen wie man folgendes rechnet :

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1] = [(x + tx),(y + ty),(z + ty),1]
| tx ty tz 1 |

oder

| sx 0 0 0 |
| 0 sy 0 0 |
| 0 0 sz 0 | * [x,y,z,1] = [(x * sx),(y * sy),(z * sy),1]
| 0 0 0 1 |

Wie kommt man zu diesem Ergebnis ?

Vielen Dank!

Hallo,
ich versuchs mal!

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1] = [(x + tx),(y + ty),(z + ty),1]
| tx ty tz 1 |

Meiner Meinung nach ist das FALSCH!
Richtig ist allerdings (die Matirix nenne ich M):
[x,y,z,1] * M = [(x+tx),(y+ty),(z+tz),1]
Die Rechenregel für Matrizenmultiplikation lautet „Zeile mal Spalte“ also an einem 2x2 Beispiel:
| A B | * | E F | = | (A*E+B*G) (A*F+B*H)|
| C D | * | G H | | (C*E+D*G) (C*F+D*H)|
Wenn man statt der Matrix einen Vektor hat, fallen die betreffenden Dimensionen einfach weg (im Beispiel könnte man C=0 und D=0 wählen). Wählt man dagegen G=0 und H=0 ist das Ergebnis offensichtlich anders, da die Matrixmultiplikation NICHT kommutativ ist (also M*N N*M).

Cu Rene

Hi,

das zweite sollte jeweils ein Spaltenvektor sein, genauso wie das Ergebnis, dann ergibt sich eine Ergebniskomponente als Produkt der entsprechenden Matrixzeile mit dem Spaltenvektor. Erste Zahl mal erste Zahl plus zweite Zahl mal zweite Zahl, …

Du kannst das ganze aber auch so als Definition auffassen.

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1] = [(x + tx),(y + ty),(z + ty),1]
| tx ty tz 1 |

Das ist eine Verschiebung geschrieben als Euklidische Transformation (=Kombination von Drehung und Verschiebung)

| sx 0 0 0 |
| 0 sy 0 0 |
| 0 0 sz 0 | * [x,y,z,1] = [(x * sx),(y * sy),(z * sy),1]
| 0 0 0 1 |

Und das eine Streckung in Achsenrichtung. Beachte, dass wenn Drehungen ins Spiel kommen, das Ergebnis von der Reihenfolge abhaengt.

Ciao Lutz

Hallo,

das zweite sollte jeweils ein Spaltenvektor sein, genauso wie
das Ergebnis, dann ergibt sich eine Ergebniskomponente als
Produkt der entsprechenden
Matrixzeile mit dem Spaltenvektor.

Zeile!

Du kannst das ganze aber auch so als Definition auffassen.

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1] = [(x + tx),(y + ty),(z + ty),1]
| tx ty tz 1 |

Nach deiner Beschreibung wäre das Ergebnis doch:
[x,y,z,x*tx+y*ty+z*tz+1] (als Spaltenvektor) ?

Cu Rene

[x,y,z,x*tx+y*ty+z*tz+1] (als Spaltenvektor) ?

Sorry, ist wohl schon zu spaet. Ich hab’ schief geguckt.

In der mir gelaeufigen Form kommt der affine Teil (die 1) als erstes in die 0-te Koordinate und demzufolge der Verschiebungsvektor in die erste Spalte.

Andererseits kann das in der Computergraphik eine andere Logik haben, sowas hat mich bei Postscript-Transformationsmatrizen auch schon irritiert.

Ciao Lutz

Schaut mal hier :

http://miss.wu-wien.ac.at/~leydold/MOK/HTML/node17.html

Hallo,

ich versuche gerade einen Einstieg in die 3D-Programmierung zu
bekommen und bin auf eine eher simple Sache gestoßen. Leider
habe ich vergessen wie man folgendes rechnet :

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1] = [(x + tx),(y + ty),(z + ty),1]
| tx ty tz 1 |

Hi,
das ist natürlich falsch! Richtig muss es heissen:

 | 1 0 0 0 |
 | 0 1 0 0 |
[x,y,z,1] \*| 0 0 1 0 | = [(x + tx),(y + ty),(z + ty),1]
 | tx ty tz 1 |

Mann benutzt 4*4-Matrizen in 3D-engines, um reine (3D) Translationen, Perspektiven usw, als Matrizenprodukt darzustellen.

Gruß Frank

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 | * [x,y,z,1]
| tx ty tz 1 |
= [(x + tx),(y + ty),(z + ty),1]

^^
Ist wahrschinlich ein Tippfehler, soll wohl tz heißen.

Cu Rene