Pour un de mes projets classifiés, j'ai eu besoin de créer une Matrice en 3D. Pour vous expliquer brièvement, Matrix3D est un gros cube remplis de petit cube. Chaque petit cube représente une valeur. Dans le prototype ci-dessous, le gros cube fait 5X5X5 et chaque petit cube est réel double précision.
Il y a également une Matrice 2D ainsi que quelques opérations de base.
Vous êtes libre de faire ce que vous voulez avec ce code.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Matrice à 2 ou 3 Dimensions
; Fichier : Code Prototype à ajuster au besoin.
; Version : 1.0.0
; Programmation = OK
; Programmé par : Guimauve
; Date : 10-09-2006
; Mise à jour : 10-09-2006
; Codé avec PureBasic V4.00
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#Array_Size = 5
Structure Vector
Coords.d[#Array_Size]
EndStructure
Structure Matrix2D
Lines.Vector[#Array_Size]
EndStructure
Structure Matrix3D
Stratums.Matrix2D[#Array_Size]
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Access macros >>>>>
Macro AccessMatrix2D(MatrixA, i, j)
MatrixA\Lines[i]\Coords[j]
EndMacro
Macro AccessMatrix3D(MatrixA, i, j, k)
MatrixA\Stratums[i]\Lines[j]\Coords[k]
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Plus operator R = A + B >>>>>
Macro PlusMatrix2D(MatrixR, MatrixA, MatrixB)
For i = 0 To #Array_Size -1
For j = 0 To #Array_Size -1
AccessMatrix2D(MatrixR, i, j) = AccessMatrix2D(MatrixA, i, j) + AccessMatrix2D(MatrixB, i, j)
Next
Next
EndMacro
Macro PlusMatrix3D(MatrixR, MatrixA, MatrixB)
For i = 0 To #Array_Size -1
For j = 0 To #Array_Size -1
For k = 0 To #Array_Size -1
AccessMatrix3D(MatrixR, i, j, k) = AccessMatrix3D(MatrixA, i, j, k) + AccessMatrix3D(MatrixB, i, j, k)
Next
Next
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Minus operator R = A - B >>>>>
Macro MinusMatrix2D(MatrixR, MatrixA, MatrixB)
For i = 0 To #Array_Size -1
For j = 0 To #Array_Size -1
AccessMatrix2D(MatrixR, i, j) = AccessMatrix2D(MatrixA, i, j) - AccessMatrix2D(MatrixB, i, j)
Next
Next
EndMacro
Macro MinusMatrix3D(MatrixR, MatrixA, MatrixB)
For i = 0 To #Array_Size -1
For j = 0 To #Array_Size -1
For k = 0 To #Array_Size -1
AccessMatrix3D(MatrixR, i, j, k) = AccessMatrix3D(MatrixA, i, j, k) - AccessMatrix3D(MatrixB, i, j, k)
Next
Next
Next
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Zero operator >>>>>
Macro ZeroMatrix2D(MatrixA)
RtlZeroMemory_(MatrixA, SizeOf(Matrix2D))
EndMacro
Macro ZeroMatrix3D(MatrixA)
RtlZeroMemory_(MatrixA, SizeOf(Matrix3D))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Copy operator From MatrixA to MatrixB >>>>>
Macro CopyMatrix2D(MatrixA, MatrixB)
CopyMemory(MatrixA, MatrixB, SizeOf(Matrix2D))
EndMacro
Macro CopyMatrix3D(MatrixA, MatrixB)
CopyMemory(MatrixA, MatrixB, SizeOf(Matrix3D))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Compare operator >>>>>
Macro CompareMatrix2D(MatrixA, MatrixB)
CompareMemory(MatrixA, MatrixB, SizeOf(Matrix2D))
EndMacro
Macro CompareMatrix3D(MatrixA, MatrixB)
CompareMemory(MatrixA, MatrixB, SizeOf(Matrix3D))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read binary file >>>>>
Macro ReadMatrix2D(FileID, MatrixA)
ReadData(FileID, MatrixA, SizeOf(Matrix2D))
EndMacro
Macro ReadMatrix3D(FileID, MatrixA)
ReadData(FileID, MatrixA, SizeOf(Matrix3D))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write binary file >>>>>
Macro WriteMatrix2D(FileID, MatrixA)
WriteData(FileID, MatrixA, SizeOf(Matrix2D))
EndMacro
Macro WriteMatrix3D(FileID, MatrixA)
WriteData(FileID, MatrixA, SizeOf(Matrix3D))
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<