Matrizen Multiplizieren...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Timo

Betreff: Matrizen Multiplizieren...

BeitragSo, Dez 05, 2004 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

viele Grüße
Timo

TheShadow

Moderator

BeitragSo, Dez 05, 2004 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbase.de/lexikon/matrix.htm
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

Timo

BeitragSo, Dez 05, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked das du was über Matrizen auf deiner Seite hast, hätte ich nicht gedacht, danke!! Smile

TheShadow

Moderator

BeitragSo, Dez 05, 2004 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 06, 2004 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Dez 06, 2004 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
zuerst 2 und dann noch die dritte mit der matrix die aus den ersten 2 resultiert? wie mit jeder normalen zahl vielleicht auch? Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Timo

BeitragMo, Dez 06, 2004 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
hm... ja leuchtet ein, ne?! Wink danke

TheShadow

Moderator

BeitragMo, Dez 06, 2004 21:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 24, 2009 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
MFG Darren

Noobody

BeitragSo, Mai 24, 2009 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 24, 2009 15:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group