Matrizen Multiplizieren...
Übersicht

TimoBetreff: Matrizen Multiplizieren... |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo allerseits,
Wie multipliziert man eigentlich Matrizen miteinander? Irgendwie kapiere ich das nicht. Ich habe zwei 4*4 Matrizen. wenn jemand mir zeigen könnte wies geht, fänd ich das toll! Noch besser währe wenn ihr mir die Schritte erklären könntet ![]() viele Grüße Timo |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www.blitzbase.de/lexikon/matrix.htm | ||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() ![]() |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm ja... der text wird irgendwann überarbeitet, weil es z.B. dieser text nicht ganz korrekt ist:
Die obere Matrix kann über diese Formel benutzt werden: x_neu=(x*11) + (y*21) + (z*31) + 41 y_neu=(x*12) + (y*22) + (z*32) + 42 z_neu=(x*13) + (y*23) + (z*33) + 43 genauer gesagt ist es bereits eine Multiplikation mit einer anderen Matrix, die nur 1 Feld breit oder hoch ist. |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nun gut, jetzt habe ich 2 Tage damit verbracht, diese blöden Matrizen (ich kann sie schon nicht mehr sehen...) zu verstehen, und ich bin eigentlich der Meinung, ich habe sie einigermaßen verstanden.
Allerdings grübel ich noch über eine sache. Theoretisch habe ich 3 Matrizen für die Rotation. Jetzt möchte ich nur aus diesen 3 Matrizen 1 machen, also quasi eine Funktion wie Rotate(m.matrix, pitch#, yaw#, roll#) Ich finde überall nur Anleitungen, wie man 2 Matrizen mit einander multipliziert, aber wie multipliziere ich 3? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
zuerst 2 und dann noch die dritte mit der matrix die aus den ersten 2 resultiert? wie mit jeder normalen zahl vielleicht auch? ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm... ja leuchtet ein, ne?! ![]() |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
die reihenfolge ist wichtig:
m=(X*Y)*Z die klammern sind hier sogar tatsächlich erforderlich. sonst könnte man das genau falschrum berechen... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi sry dass ich so nen alten thread ausgrabe, aber der link oben der angeblich zur blitzbase verlinken soll funzt nichtmehr und ich suche genau das, was da angeblich beschrieben sein soll ![]() |
||
MFG Darren |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe zwar keinen Link, aber immerhin schonmal eine kleine Funktionssammlung dazu geschrieben, falls das hilft.
Der Multiplikationsteil sieht folgendermassen aus Code: [AUSKLAPPEN] Type TMatrix4
Field A#[ 15 ] End Type Function MatrixMatrixMultiply.TMatrix4( A.TMatrix4, B.TMatrix4 ) M.TMatrix4 = New TMatrix4 M\A[ 0 ] = A\A[ 0 ]*B\A[ 0 ] + A\A[ 1 ]*B\A[ 4 ] + A\A[ 2 ]*B\A[ 8 ] + A\A[ 3 ]*B\A[ 12 ] M\A[ 1 ] = A\A[ 0 ]*B\A[ 1 ] + A\A[ 1 ]*B\A[ 5 ] + A\A[ 2 ]*B\A[ 9 ] + A\A[ 3 ]*B\A[ 13 ] M\A[ 2 ] = A\A[ 0 ]*B\A[ 2 ] + A\A[ 1 ]*B\A[ 6 ] + A\A[ 2 ]*B\A[ 10 ] + A\A[ 3 ]*B\A[ 14 ] M\A[ 3 ] = A\A[ 0 ]*B\A[ 3 ] + A\A[ 1 ]*B\A[ 7 ] + A\A[ 2 ]*B\A[ 11 ] + A\A[ 3 ]*B\A[ 15 ] M\A[ 4 ] = A\A[ 4 ]*B\A[ 0 ] + A\A[ 5 ]*B\A[ 4 ] + A\A[ 6 ]*B\A[ 8 ] + A\A[ 7 ]*B\A[ 12 ] M\A[ 5 ] = A\A[ 4 ]*B\A[ 1 ] + A\A[ 5 ]*B\A[ 5 ] + A\A[ 6 ]*B\A[ 9 ] + A\A[ 7 ]*B\A[ 13 ] M\A[ 6 ] = A\A[ 4 ]*B\A[ 2 ] + A\A[ 5 ]*B\A[ 6 ] + A\A[ 6 ]*B\A[ 10 ] + A\A[ 7 ]*B\A[ 14 ] M\A[ 7 ] = A\A[ 4 ]*B\A[ 3 ] + A\A[ 5 ]*B\A[ 7 ] + A\A[ 6 ]*B\A[ 11 ] + A\A[ 7 ]*B\A[ 15 ] M\A[ 8 ] = A\A[ 8 ]*B\A[ 0 ] + A\A[ 9 ]*B\A[ 4 ] + A\A[ 10 ]*B\A[ 8 ] + A\A[ 11 ]*B\A[ 12 ] M\A[ 9 ] = A\A[ 8 ]*B\A[ 1 ] + A\A[ 9 ]*B\A[ 5 ] + A\A[ 10 ]*B\A[ 9 ] + A\A[ 11 ]*B\A[ 13 ] M\A[ 10 ] = A\A[ 8 ]*B\A[ 2 ] + A\A[ 9 ]*B\A[ 6 ] + A\A[ 10 ]*B\A[ 10 ] + A\A[ 11 ]*B\A[ 14 ] M\A[ 11 ] = A\A[ 8 ]*B\A[ 3 ] + A\A[ 9 ]*B\A[ 7 ] + A\A[ 10 ]*B\A[ 11 ] + A\A[ 11 ]*B\A[ 15 ] M\A[ 12 ] = A\A[ 12 ]*B\A[ 0 ] + A\A[ 13 ]*B\A[ 4 ] + A\A[ 14 ]*B\A[ 8 ] + A\A[ 15 ]*B\A[ 12 ] M\A[ 13 ] = A\A[ 12 ]*B\A[ 1 ] + A\A[ 13 ]*B\A[ 5 ] + A\A[ 14 ]*B\A[ 9 ] + A\A[ 15 ]*B\A[ 13 ] M\A[ 14 ] = A\A[ 12 ]*B\A[ 2 ] + A\A[ 13 ]*B\A[ 6 ] + A\A[ 14 ]*B\A[ 10 ] + A\A[ 15 ]*B\A[ 14 ] M\A[ 15 ] = A\A[ 12 ]*B\A[ 3 ] + A\A[ 13 ]*B\A[ 7 ] + A\A[ 14 ]*B\A[ 11 ] + A\A[ 15 ]*B\A[ 15 ] Return M End Function |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo danke dir, habs aber schon selbst gelöst und zwar folgendermaßen:
Code: [AUSKLAPPEN] Dim m_c%(3,3) Type matrix Field e#[15] End Type Local i,x,y=-1 For i = 0 To 15 If ((i) Mod 4) = 0 Then y = y + 1 End If x = ((i) Mod 4) m_c(x,y) = i Next Function matrix_mult(m2.matrix,m1.matrix,m3.matrix) Local x,y,i For y = 0 To 3 For x = 0 To 3 m3\e[m_c(x,y)] = m1\e[m_c(x,0)]*m2\e[m_c(0,y)] + m1\e[m_c(x,1)]*m2\e[m_c(1,y)] + m1\e[m_c(x,2)]*m2\e[m_c(2,y)] + m1\e[m_c(x,3)]*m2\e[m_c(3,y)] Next Next End Function die erste for-schleife füllt mir ein array das mir die 2d-koordinaten innerhalb der matrix in den fortlaufenden index umwandelt. so kann man bisschen komfortabler und lesbarer auf die einzelnen zellen in der matrix zugreifen.[/code] |
||
MFG Darren |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group