Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.11.2007, 21:37

Achsenmatrix

Hi,
es geht um folgende Matrix:

xx yx zx 0
xy yy zy 0
xz yz zz 0
0 0 0 1

Man hat darin also eine 3x3 Matrix mit den normalisierten Vektoren der Achsen. Wenn man damit also ein Vektor multipliziert wird er in ein Koordinatensystem mit anders ausgerichteten Achsen transformiert.

Und nun die doofe Frage: Warum funktioniert das?^^ Gibt es dafür eine gute Herleitung oder ist das nur mir nicht sofort einsichtig?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

26.11.2007, 23:28

gleich zu beginn: die frage is nicht doof und du bist sicher nicht der einzige der sich das fragt (ich habs mich auch oft gefragt...) ;)

wenn du vektor * matrix rechnen willst, müssen die achsenvektoren in die zeilen. ich hab mal angefangen ein tutorial drüber zu schreiben, bin aber irgendwie nie dazugekommen das fertigzustellen...

anyway. ich versuch mal ganz kurz zu erklären:

aus der definition der matritzenmultiplikation ergibt sich folgendes:

wenn du einen zeilenvektor mit einer matrix multiplizierst, ergibt sich die x koordinate des vektors aus dem punktprodukt des vektors mit der ersten spalte der matrix, y mit der zweiten und z mit der dritten spalte. beschränken wir uns mal auf 3x3 matritzen, die elemente der matrix seien M_ij (i der zeilenindex und j der spaltenindex), der vektor sei (x, y, z), (x', y', z') sei das ergebnis der transformation:

Quellcode

1
2
3
x' = x * M_11 + y * M_21 + z * M_31
y' = x * M_12 + y * M_22 + z * M_32
z' = x * M_13 + y * M_23 + z * M_33


das ist die matrixmultiplikation ausgeschrieben (latex wär irgendwie geil zu haben :D).

ok, überlegen wir uns einmal, was koordinaten eigentlich bedeuten. der koordinatenvektor (x, y, z) bedeutet ja nichts anderes als: "gehe x einheiten in richtung der x-achse, y einheiten in richtung y-achse und z einheiten in richtung z-achse". wenn wir unsere x, y und z achsen durch die vektoren u, v und w beschreiben, sähe das folgendermaßen aus (p ist der punkt zu dem die koordinaten gehören):

Quellcode

1
p = x * u + y * v + z * w


für jede koordinate einzeln aufgeschrieben:

Quellcode

1
2
3
p_x = x * u_y + y * v_x + z * w_x
p_y = x * u_y + y * v_y + z * w_y
p_z = x * u_z + y * v_z + z * w_z


uns fällt natürlich sofort auf, dass das aussieht wie eine matrixmultiplikation ;)

wenn wir also die koordinaten der x-achse in die erste zeile, der y-achse in die zweite zeile und der z-achse in die dritte zeile der matrix schreiben, bekommen wir genau das da oben, wenn wir einen vektor (x, y, z) mit dieser matrix multiplizieren.

was bedeutet das jetzt. nun wir haben die x, y und z achse ja selbst in einem koordinatensystem gegeben. wenn wir nun die koordinaten eines punktes in dem von diesen achsenvektoren aufgespannten koordinatensystem gegeben haben und mit dieser matrix multiplizieren, dann bekommen wir die koordinaten dieses punktes in dem system, in dem die koordinatenachsen selbst liegen. wir haben den punkt also vom einen system in das andere transformiert.

ich hab dazu mal ein schönes bild gemalt (q ist der vektor dessen koordinaten wir transformieren wollen, u, v und w sind unsere x, y und z achsen in der matrix):


(Link)


ich hoffe ich hab das einigermaßen anschaulich erklärt. wenn dus formal ganz genau wissen willst, dann beschäftige dich etwas eingehender mit linearer algebra ;) (stichwörter: koordinatentransformation, affine transformation, lineare abbildung, homogene koordinaten, ...)

3

27.11.2007, 14:38

Danke, hat es wesentlich klarer gemacht. Guter Service.

Werbeanzeige