Even if I didn't finish Dev-Module the way I want it, I'm releasing the source code anyway at version 0.9.1 so you can compile the program for your self.
https://www.dropbox.com/s/18grz96hs68fx ... a.zip?dl=0
The source code has been successfully compiled on Window XP SP3 and Ubuntu 18.04 x64. The source code might require some adjustment on MacOS, see these source files for more detail :
- DevModule - DevModule.pb
DevModule - Extra.pb
What the program does you may ask ? See this program as a Module Wizard like a Class Wizard in C++. Before someone tell me A MODULE IS NOT A CLASS ! I'm aware of that. An example, you need a 4X4 matrix of double to do some computation and Write and Read them on file but you don't want to write the entire code your self so see what Dev-Module can do for you in a matter of milliseconds.
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; AUTOMATICALLY GENERATED CODE, DO NOT MODIFY
; UNLESS YOU REALLY, REALLY, REALLY MEAN IT !!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Code generated by : Dev-Module - V0.9.1
; Project name : the project name here
; File name : File name here
; File Version : 0.0.0
; Programmation : In progress
; Programmed by : StarBootics
; Creation Date : 10-06-2018
; Last update : 10-06-2018
; Coded for PureBasic : V5.70 beta 1
; Platform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
DeclareModule Matrix44
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Structure declaration <<<<<
Structure Matrix44
e11.d
e21.d
e31.d
e41.d
e12.d
e22.d
e32.d
e42.d
e13.d
e23.d
e33.d
e43.d
e14.d
e24.d
e34.d
e44.d
EndStructure
Declare Reset(*Matrix44A.Matrix44)
Declare Equal(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Plus(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Minus(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Product(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Zero(*Matrix44A.Matrix44)
Declare One(*Matrix44A.Matrix44)
Declare ProductByScalar(*Matrix44R.Matrix44, *Matrix44A.Matrix44, P_Scalar.d)
Declare DivideByScalar(*Matrix44R.Matrix44, *Matrix44A.Matrix44, P_Scalar.d)
Declare Copy(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Compare(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Swapping(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
Declare Identity(*Matrix44A.Matrix44)
Declare Transpose(*Matrix44R.Matrix44, *Matrix44A.Matrix44)
Declare SelfTranspose(*Matrix44A.Matrix44)
Declare Randomize(*Matrix44A.Matrix44, Min.d, Max.d, Resolution = 10000)
Declare.d Determinant(*Matrix44A.Matrix44)
Declare.b Inverse(*Inverse.Matrix44, *Matrix44A.Matrix44)
Declare.s FormatLine1(*Matrix44A.Matrix44, Decimal = 6)
Declare.s FormatLine2(*Matrix44A.Matrix44, Decimal = 6)
Declare.s FormatLine3(*Matrix44A.Matrix44, Decimal = 6)
Declare.s FormatLine4(*Matrix44A.Matrix44, Decimal = 6)
Declare UnformatLine1(*Matrix44A.Matrix44, P_MatrixLine.s)
Declare UnformatLine2(*Matrix44A.Matrix44, P_MatrixLine.s)
Declare UnformatLine3(*Matrix44A.Matrix44, P_MatrixLine.s)
Declare UnformatLine4(*Matrix44A.Matrix44, P_MatrixLine.s)
Declare ReadMatrix44(FileID.i, *Matrix44A.Matrix44)
Declare WriteMatrix44(FileID.i, *Matrix44A.Matrix44)
EndDeclareModule
Module Matrix44
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Reset operator <<<<<
Procedure Reset(*Matrix44A.Matrix44)
*Matrix44A\e11 = 0.0
*Matrix44A\e21 = 0.0
*Matrix44A\e31 = 0.0
*Matrix44A\e41 = 0.0
*Matrix44A\e12 = 0.0
*Matrix44A\e22 = 0.0
*Matrix44A\e32 = 0.0
*Matrix44A\e42 = 0.0
*Matrix44A\e13 = 0.0
*Matrix44A\e23 = 0.0
*Matrix44A\e33 = 0.0
*Matrix44A\e43 = 0.0
*Matrix44A\e14 = 0.0
*Matrix44A\e24 = 0.0
*Matrix44A\e34 = 0.0
*Matrix44A\e44 = 0.0
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Equal operator : A = B <<<<<
Procedure Equal(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
*Matrix44A\e11 = *Matrix44B\e11
*Matrix44A\e21 = *Matrix44B\e21
*Matrix44A\e31 = *Matrix44B\e31
*Matrix44A\e41 = *Matrix44B\e41
*Matrix44A\e12 = *Matrix44B\e12
*Matrix44A\e22 = *Matrix44B\e22
*Matrix44A\e32 = *Matrix44B\e32
*Matrix44A\e42 = *Matrix44B\e42
*Matrix44A\e13 = *Matrix44B\e13
*Matrix44A\e23 = *Matrix44B\e23
*Matrix44A\e33 = *Matrix44B\e33
*Matrix44A\e43 = *Matrix44B\e43
*Matrix44A\e14 = *Matrix44B\e14
*Matrix44A\e24 = *Matrix44B\e24
*Matrix44A\e34 = *Matrix44B\e34
*Matrix44A\e44 = *Matrix44B\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Plus operator : R = A + B <<<<<
Procedure Plus(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
*Matrix44R\e11 = *Matrix44A\e11 + *Matrix44B\e11
*Matrix44R\e21 = *Matrix44A\e21 + *Matrix44B\e21
*Matrix44R\e31 = *Matrix44A\e31 + *Matrix44B\e31
*Matrix44R\e41 = *Matrix44A\e41 + *Matrix44B\e41
*Matrix44R\e12 = *Matrix44A\e12 + *Matrix44B\e12
*Matrix44R\e22 = *Matrix44A\e22 + *Matrix44B\e22
*Matrix44R\e32 = *Matrix44A\e32 + *Matrix44B\e32
*Matrix44R\e42 = *Matrix44A\e42 + *Matrix44B\e42
*Matrix44R\e13 = *Matrix44A\e13 + *Matrix44B\e13
*Matrix44R\e23 = *Matrix44A\e23 + *Matrix44B\e23
*Matrix44R\e33 = *Matrix44A\e33 + *Matrix44B\e33
*Matrix44R\e43 = *Matrix44A\e43 + *Matrix44B\e43
*Matrix44R\e14 = *Matrix44A\e14 + *Matrix44B\e14
*Matrix44R\e24 = *Matrix44A\e24 + *Matrix44B\e24
*Matrix44R\e34 = *Matrix44A\e34 + *Matrix44B\e34
*Matrix44R\e44 = *Matrix44A\e44 + *Matrix44B\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Minus operator : R = A - B <<<<<
Procedure Minus(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
*Matrix44R\e11 = *Matrix44A\e11 - *Matrix44B\e11
*Matrix44R\e21 = *Matrix44A\e21 - *Matrix44B\e21
*Matrix44R\e31 = *Matrix44A\e31 - *Matrix44B\e31
*Matrix44R\e41 = *Matrix44A\e41 - *Matrix44B\e41
*Matrix44R\e12 = *Matrix44A\e12 - *Matrix44B\e12
*Matrix44R\e22 = *Matrix44A\e22 - *Matrix44B\e22
*Matrix44R\e32 = *Matrix44A\e32 - *Matrix44B\e32
*Matrix44R\e42 = *Matrix44A\e42 - *Matrix44B\e42
*Matrix44R\e13 = *Matrix44A\e13 - *Matrix44B\e13
*Matrix44R\e23 = *Matrix44A\e23 - *Matrix44B\e23
*Matrix44R\e33 = *Matrix44A\e33 - *Matrix44B\e33
*Matrix44R\e43 = *Matrix44A\e43 - *Matrix44B\e43
*Matrix44R\e14 = *Matrix44A\e14 - *Matrix44B\e14
*Matrix44R\e24 = *Matrix44A\e24 - *Matrix44B\e24
*Matrix44R\e34 = *Matrix44A\e34 - *Matrix44B\e34
*Matrix44R\e44 = *Matrix44A\e44 - *Matrix44B\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Product operator : R = A * B <<<<<
Procedure Product(*Matrix44R.Matrix44, *Matrix44A.Matrix44, *Matrix44B.Matrix44)
*Matrix44R\e11 = *Matrix44A\e11 * *Matrix44B\e11 + *Matrix44A\e12 * *Matrix44B\e21 + *Matrix44A\e13 * *Matrix44B\e31 + *Matrix44A\e14 * *Matrix44B\e41
*Matrix44R\e12 = *Matrix44A\e11 * *Matrix44B\e12 + *Matrix44A\e12 * *Matrix44B\e22 + *Matrix44A\e13 * *Matrix44B\e32 + *Matrix44A\e14 * *Matrix44B\e42
*Matrix44R\e13 = *Matrix44A\e11 * *Matrix44B\e13 + *Matrix44A\e12 * *Matrix44B\e23 + *Matrix44A\e13 * *Matrix44B\e33 + *Matrix44A\e14 * *Matrix44B\e43
*Matrix44R\e14 = *Matrix44A\e11 * *Matrix44B\e14 + *Matrix44A\e12 * *Matrix44B\e24 + *Matrix44A\e13 * *Matrix44B\e34 + *Matrix44A\e14 * *Matrix44B\e44
*Matrix44R\e21 = *Matrix44A\e21 * *Matrix44B\e11 + *Matrix44A\e22 * *Matrix44B\e21 + *Matrix44A\e23 * *Matrix44B\e31 + *Matrix44A\e24 * *Matrix44B\e41
*Matrix44R\e22 = *Matrix44A\e21 * *Matrix44B\e12 + *Matrix44A\e22 * *Matrix44B\e22 + *Matrix44A\e23 * *Matrix44B\e32 + *Matrix44A\e24 * *Matrix44B\e42
*Matrix44R\e23 = *Matrix44A\e21 * *Matrix44B\e13 + *Matrix44A\e22 * *Matrix44B\e23 + *Matrix44A\e23 * *Matrix44B\e33 + *Matrix44A\e24 * *Matrix44B\e43
*Matrix44R\e24 = *Matrix44A\e21 * *Matrix44B\e14 + *Matrix44A\e22 * *Matrix44B\e24 + *Matrix44A\e23 * *Matrix44B\e34 + *Matrix44A\e24 * *Matrix44B\e44
*Matrix44R\e31 = *Matrix44A\e31 * *Matrix44B\e11 + *Matrix44A\e32 * *Matrix44B\e21 + *Matrix44A\e33 * *Matrix44B\e31 + *Matrix44A\e34 * *Matrix44B\e41
*Matrix44R\e32 = *Matrix44A\e31 * *Matrix44B\e12 + *Matrix44A\e32 * *Matrix44B\e22 + *Matrix44A\e33 * *Matrix44B\e32 + *Matrix44A\e34 * *Matrix44B\e42
*Matrix44R\e33 = *Matrix44A\e31 * *Matrix44B\e13 + *Matrix44A\e32 * *Matrix44B\e23 + *Matrix44A\e33 * *Matrix44B\e33 + *Matrix44A\e34 * *Matrix44B\e43
*Matrix44R\e34 = *Matrix44A\e31 * *Matrix44B\e14 + *Matrix44A\e32 * *Matrix44B\e24 + *Matrix44A\e33 * *Matrix44B\e34 + *Matrix44A\e34 * *Matrix44B\e44
*Matrix44R\e41 = *Matrix44A\e41 * *Matrix44B\e11 + *Matrix44A\e42 * *Matrix44B\e21 + *Matrix44A\e43 * *Matrix44B\e31 + *Matrix44A\e44 * *Matrix44B\e41
*Matrix44R\e42 = *Matrix44A\e41 * *Matrix44B\e12 + *Matrix44A\e42 * *Matrix44B\e22 + *Matrix44A\e43 * *Matrix44B\e32 + *Matrix44A\e44 * *Matrix44B\e42
*Matrix44R\e43 = *Matrix44A\e41 * *Matrix44B\e13 + *Matrix44A\e42 * *Matrix44B\e23 + *Matrix44A\e43 * *Matrix44B\e33 + *Matrix44A\e44 * *Matrix44B\e43
*Matrix44R\e44 = *Matrix44A\e41 * *Matrix44B\e14 + *Matrix44A\e42 * *Matrix44B\e24 + *Matrix44A\e43 * *Matrix44B\e34 + *Matrix44A\e44 * *Matrix44B\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Zero operator <<<<<
Procedure Zero(*Matrix44A.Matrix44)
*Matrix44A\e11 = 0.0
*Matrix44A\e21 = 0.0
*Matrix44A\e31 = 0.0
*Matrix44A\e41 = 0.0
*Matrix44A\e12 = 0.0
*Matrix44A\e22 = 0.0
*Matrix44A\e32 = 0.0
*Matrix44A\e42 = 0.0
*Matrix44A\e13 = 0.0
*Matrix44A\e23 = 0.0
*Matrix44A\e33 = 0.0
*Matrix44A\e43 = 0.0
*Matrix44A\e14 = 0.0
*Matrix44A\e24 = 0.0
*Matrix44A\e34 = 0.0
*Matrix44A\e44 = 0.0
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The One operator <<<<<
Procedure One(*Matrix44A.Matrix44)
*Matrix44A\e11 = 1.0
*Matrix44A\e21 = 1.0
*Matrix44A\e31 = 1.0
*Matrix44A\e41 = 1.0
*Matrix44A\e12 = 1.0
*Matrix44A\e22 = 1.0
*Matrix44A\e32 = 1.0
*Matrix44A\e42 = 1.0
*Matrix44A\e13 = 1.0
*Matrix44A\e23 = 1.0
*Matrix44A\e33 = 1.0
*Matrix44A\e43 = 1.0
*Matrix44A\e14 = 1.0
*Matrix44A\e24 = 1.0
*Matrix44A\e34 = 1.0
*Matrix44A\e44 = 1.0
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The ProductByScalar operator : R = A * Scalar <<<<<
Procedure ProductByScalar(*Matrix44R.Matrix44, *Matrix44A.Matrix44, P_Scalar.d)
*Matrix44R\e11 = *Matrix44A\e11 * P_Scalar
*Matrix44R\e21 = *Matrix44A\e21 * P_Scalar
*Matrix44R\e31 = *Matrix44A\e31 * P_Scalar
*Matrix44R\e41 = *Matrix44A\e41 * P_Scalar
*Matrix44R\e12 = *Matrix44A\e12 * P_Scalar
*Matrix44R\e22 = *Matrix44A\e22 * P_Scalar
*Matrix44R\e32 = *Matrix44A\e32 * P_Scalar
*Matrix44R\e42 = *Matrix44A\e42 * P_Scalar
*Matrix44R\e13 = *Matrix44A\e13 * P_Scalar
*Matrix44R\e23 = *Matrix44A\e23 * P_Scalar
*Matrix44R\e33 = *Matrix44A\e33 * P_Scalar
*Matrix44R\e43 = *Matrix44A\e43 * P_Scalar
*Matrix44R\e14 = *Matrix44A\e14 * P_Scalar
*Matrix44R\e24 = *Matrix44A\e24 * P_Scalar
*Matrix44R\e34 = *Matrix44A\e34 * P_Scalar
*Matrix44R\e44 = *Matrix44A\e44 * P_Scalar
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The DivideByScalar operator : R = A / Scalar <<<<<
Procedure DivideByScalar(*Matrix44R.Matrix44, *Matrix44A.Matrix44, P_Scalar.d)
*Matrix44R\e11 = *Matrix44A\e11 / P_Scalar
*Matrix44R\e21 = *Matrix44A\e21 / P_Scalar
*Matrix44R\e31 = *Matrix44A\e31 / P_Scalar
*Matrix44R\e41 = *Matrix44A\e41 / P_Scalar
*Matrix44R\e12 = *Matrix44A\e12 / P_Scalar
*Matrix44R\e22 = *Matrix44A\e22 / P_Scalar
*Matrix44R\e32 = *Matrix44A\e32 / P_Scalar
*Matrix44R\e42 = *Matrix44A\e42 / P_Scalar
*Matrix44R\e13 = *Matrix44A\e13 / P_Scalar
*Matrix44R\e23 = *Matrix44A\e23 / P_Scalar
*Matrix44R\e33 = *Matrix44A\e33 / P_Scalar
*Matrix44R\e43 = *Matrix44A\e43 / P_Scalar
*Matrix44R\e14 = *Matrix44A\e14 / P_Scalar
*Matrix44R\e24 = *Matrix44A\e24 / P_Scalar
*Matrix44R\e34 = *Matrix44A\e34 / P_Scalar
*Matrix44R\e44 = *Matrix44A\e44 / P_Scalar
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Copy operator : A = Source : B = Destination <<<<<
Procedure Copy(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
*Matrix44B\e11 = *Matrix44A\e11
*Matrix44B\e21 = *Matrix44A\e21
*Matrix44B\e31 = *Matrix44A\e31
*Matrix44B\e41 = *Matrix44A\e41
*Matrix44B\e12 = *Matrix44A\e12
*Matrix44B\e22 = *Matrix44A\e22
*Matrix44B\e32 = *Matrix44A\e32
*Matrix44B\e42 = *Matrix44A\e42
*Matrix44B\e13 = *Matrix44A\e13
*Matrix44B\e23 = *Matrix44A\e23
*Matrix44B\e33 = *Matrix44A\e33
*Matrix44B\e43 = *Matrix44A\e43
*Matrix44B\e14 = *Matrix44A\e14
*Matrix44B\e24 = *Matrix44A\e24
*Matrix44B\e34 = *Matrix44A\e34
*Matrix44B\e44 = *Matrix44A\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Compare operator <<<<<
Procedure Compare(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
If *Matrix44A\e11 <> *Matrix44B\e11
ProcedureReturn #False
EndIf
If *Matrix44A\e21 <> *Matrix44B\e21
ProcedureReturn #False
EndIf
If *Matrix44A\e31 <> *Matrix44B\e31
ProcedureReturn #False
EndIf
If *Matrix44A\e41 <> *Matrix44B\e41
ProcedureReturn #False
EndIf
If *Matrix44A\e12 <> *Matrix44B\e12
ProcedureReturn #False
EndIf
If *Matrix44A\e22 <> *Matrix44B\e22
ProcedureReturn #False
EndIf
If *Matrix44A\e32 <> *Matrix44B\e32
ProcedureReturn #False
EndIf
If *Matrix44A\e42 <> *Matrix44B\e42
ProcedureReturn #False
EndIf
If *Matrix44A\e13 <> *Matrix44B\e13
ProcedureReturn #False
EndIf
If *Matrix44A\e23 <> *Matrix44B\e23
ProcedureReturn #False
EndIf
If *Matrix44A\e33 <> *Matrix44B\e33
ProcedureReturn #False
EndIf
If *Matrix44A\e43 <> *Matrix44B\e43
ProcedureReturn #False
EndIf
If *Matrix44A\e14 <> *Matrix44B\e14
ProcedureReturn #False
EndIf
If *Matrix44A\e24 <> *Matrix44B\e24
ProcedureReturn #False
EndIf
If *Matrix44A\e34 <> *Matrix44B\e34
ProcedureReturn #False
EndIf
If *Matrix44A\e44 <> *Matrix44B\e44
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Swapping operator <<<<<
Procedure Swapping(*Matrix44A.Matrix44, *Matrix44B.Matrix44)
Swap *Matrix44A\e11, *Matrix44B\e11
Swap *Matrix44A\e21, *Matrix44B\e21
Swap *Matrix44A\e31, *Matrix44B\e31
Swap *Matrix44A\e41, *Matrix44B\e41
Swap *Matrix44A\e12, *Matrix44B\e12
Swap *Matrix44A\e22, *Matrix44B\e22
Swap *Matrix44A\e32, *Matrix44B\e32
Swap *Matrix44A\e42, *Matrix44B\e42
Swap *Matrix44A\e13, *Matrix44B\e13
Swap *Matrix44A\e23, *Matrix44B\e23
Swap *Matrix44A\e33, *Matrix44B\e33
Swap *Matrix44A\e43, *Matrix44B\e43
Swap *Matrix44A\e14, *Matrix44B\e14
Swap *Matrix44A\e24, *Matrix44B\e24
Swap *Matrix44A\e34, *Matrix44B\e34
Swap *Matrix44A\e44, *Matrix44B\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Identity operator <<<<<
Procedure Identity(*Matrix44A.Matrix44)
*Matrix44A\e11 = 1.0
*Matrix44A\e21 = 0.0
*Matrix44A\e31 = 0.0
*Matrix44A\e41 = 0.0
*Matrix44A\e12 = 0.0
*Matrix44A\e22 = 1.0
*Matrix44A\e32 = 0.0
*Matrix44A\e42 = 0.0
*Matrix44A\e13 = 0.0
*Matrix44A\e23 = 0.0
*Matrix44A\e33 = 1.0
*Matrix44A\e43 = 0.0
*Matrix44A\e14 = 0.0
*Matrix44A\e24 = 0.0
*Matrix44A\e34 = 0.0
*Matrix44A\e44 = 1.0
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Transpose operator <<<<<
Procedure Transpose(*Matrix44R.Matrix44, *Matrix44A.Matrix44)
*Matrix44R\e11 = *Matrix44A\e11
*Matrix44R\e21 = *Matrix44A\e12
*Matrix44R\e31 = *Matrix44A\e13
*Matrix44R\e41 = *Matrix44A\e14
*Matrix44R\e12 = *Matrix44A\e21
*Matrix44R\e22 = *Matrix44A\e22
*Matrix44R\e32 = *Matrix44A\e23
*Matrix44R\e42 = *Matrix44A\e24
*Matrix44R\e13 = *Matrix44A\e31
*Matrix44R\e23 = *Matrix44A\e32
*Matrix44R\e33 = *Matrix44A\e33
*Matrix44R\e43 = *Matrix44A\e34
*Matrix44R\e14 = *Matrix44A\e41
*Matrix44R\e24 = *Matrix44A\e42
*Matrix44R\e34 = *Matrix44A\e43
*Matrix44R\e44 = *Matrix44A\e44
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The SelfTranspose operator <<<<<
Procedure SelfTranspose(*Matrix44A.Matrix44)
Swap *Matrix44A\e12, *Matrix44A\e21
Swap *Matrix44A\e13, *Matrix44A\e31
Swap *Matrix44A\e14, *Matrix44A\e41
Swap *Matrix44A\e23, *Matrix44A\e32
Swap *Matrix44A\e24, *Matrix44A\e42
Swap *Matrix44A\e34, *Matrix44A\e43
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Random operator <<<<<
Procedure Randomize(*Matrix44A.Matrix44, Min.d, Max.d, Resolution = 10000)
*Matrix44A\e11 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e21 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e31 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e41 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e12 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e22 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e32 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e42 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e13 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e23 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e33 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e43 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e14 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e24 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e34 = (Min + (Max - Min) * Random(Resolution) / Resolution)
*Matrix44A\e44 = (Min + (Max - Min) * Random(Resolution) / Resolution)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Determinant operator <<<<<
Procedure.d Determinant(*Matrix44A.Matrix44)
ProcedureReturn (*Matrix44A\e11 * *Matrix44A\e22 * *Matrix44A\e33 * *Matrix44A\e44 - *Matrix44A\e11 * *Matrix44A\e22 * *Matrix44A\e34 * *Matrix44A\e43 - *Matrix44A\e11 * *Matrix44A\e32 * *Matrix44A\e23 * *Matrix44A\e44 + *Matrix44A\e11 * *Matrix44A\e32 * *Matrix44A\e24 * *Matrix44A\e43 + *Matrix44A\e11 * *Matrix44A\e42 * *Matrix44A\e23 * *Matrix44A\e34 - *Matrix44A\e11 * *Matrix44A\e42 * *Matrix44A\e24 * *Matrix44A\e33 - *Matrix44A\e21 * *Matrix44A\e12 * *Matrix44A\e33 * *Matrix44A\e44 + *Matrix44A\e21 * *Matrix44A\e12 * *Matrix44A\e34 * *Matrix44A\e43 + *Matrix44A\e21 * *Matrix44A\e32 * *Matrix44A\e13 * *Matrix44A\e44 - *Matrix44A\e21 * *Matrix44A\e32 * *Matrix44A\e14 * *Matrix44A\e43 - *Matrix44A\e21 * *Matrix44A\e42 * *Matrix44A\e13 * *Matrix44A\e34 + *Matrix44A\e21 * *Matrix44A\e42 * *Matrix44A\e14 * *Matrix44A\e33 + *Matrix44A\e31 * *Matrix44A\e12 * *Matrix44A\e23 * *Matrix44A\e44 - *Matrix44A\e31 * *Matrix44A\e12 * *Matrix44A\e24 * *Matrix44A\e43 - *Matrix44A\e31 * *Matrix44A\e22 * *Matrix44A\e13 * *Matrix44A\e44 + *Matrix44A\e31 * *Matrix44A\e22 * *Matrix44A\e14 * *Matrix44A\e43 + *Matrix44A\e31 * *Matrix44A\e42 * *Matrix44A\e13 * *Matrix44A\e24 - *Matrix44A\e31 * *Matrix44A\e42 * *Matrix44A\e14 * *Matrix44A\e23 - *Matrix44A\e41 * *Matrix44A\e12 * *Matrix44A\e23 * *Matrix44A\e34 + *Matrix44A\e41 * *Matrix44A\e12 * *Matrix44A\e24 * *Matrix44A\e33 + *Matrix44A\e41 * *Matrix44A\e22 * *Matrix44A\e13 * *Matrix44A\e34 - *Matrix44A\e41 * *Matrix44A\e22 * *Matrix44A\e14 * *Matrix44A\e33 - *Matrix44A\e41 * *Matrix44A\e32 * *Matrix44A\e13 * *Matrix44A\e24 + *Matrix44A\e41 * *Matrix44A\e32 * *Matrix44A\e14 * *Matrix44A\e23)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Inverse operator <<<<<
Procedure.b Inverse(*Inverse.Matrix44, *Matrix44A.Matrix44)
Copy(*Matrix44A, CopyA.Matrix44)
Cofactor_Determinant.d = Determinant(*Matrix44A)
If Cofactor_Determinant <> 0.0
*Inverse\e11 = (CopyA\e22 * CopyA\e33 * CopyA\e44 - CopyA\e22 * CopyA\e34 * CopyA\e43 - CopyA\e32 * CopyA\e23 * CopyA\e44 + CopyA\e32 * CopyA\e24 * CopyA\e43 + CopyA\e42 * CopyA\e23 * CopyA\e34 - CopyA\e42 * CopyA\e24 * CopyA\e33) / Cofactor_Determinant
*Inverse\e12 = (CopyA\e12 * CopyA\e34 * CopyA\e43 + CopyA\e32 * CopyA\e13 * CopyA\e44 - CopyA\e32 * CopyA\e14 * CopyA\e43 - CopyA\e42 * CopyA\e13 * CopyA\e34 + CopyA\e42 * CopyA\e14 * CopyA\e33 - CopyA\e12 * CopyA\e33 * CopyA\e44) / Cofactor_Determinant
*Inverse\e13 = (CopyA\e12 * CopyA\e23 * CopyA\e44 - CopyA\e12 * CopyA\e24 * CopyA\e43 - CopyA\e22 * CopyA\e13 * CopyA\e44 + CopyA\e22 * CopyA\e14 * CopyA\e43 + CopyA\e42 * CopyA\e13 * CopyA\e24 - CopyA\e42 * CopyA\e14 * CopyA\e23) / Cofactor_Determinant
*Inverse\e14 = (CopyA\e12 * CopyA\e24 * CopyA\e33 + CopyA\e22 * CopyA\e13 * CopyA\e34 - CopyA\e22 * CopyA\e14 * CopyA\e33 - CopyA\e32 * CopyA\e13 * CopyA\e24 + CopyA\e32 * CopyA\e14 * CopyA\e23 - CopyA\e12 * CopyA\e23 * CopyA\e34) / Cofactor_Determinant
*Inverse\e21 = (CopyA\e21 * CopyA\e34 * CopyA\e43 + CopyA\e31 * CopyA\e23 * CopyA\e44 - CopyA\e31 * CopyA\e24 * CopyA\e43 - CopyA\e41 * CopyA\e23 * CopyA\e34 + CopyA\e41 * CopyA\e24 * CopyA\e33 - CopyA\e21 * CopyA\e33 * CopyA\e44) / Cofactor_Determinant
*Inverse\e22 = (CopyA\e11 * CopyA\e33 * CopyA\e44 - CopyA\e11 * CopyA\e34 * CopyA\e43 - CopyA\e31 * CopyA\e13 * CopyA\e44 + CopyA\e31 * CopyA\e14 * CopyA\e43 + CopyA\e41 * CopyA\e13 * CopyA\e34 - CopyA\e41 * CopyA\e14 * CopyA\e33) / Cofactor_Determinant
*Inverse\e23 = (CopyA\e11 * CopyA\e24 * CopyA\e43 + CopyA\e21 * CopyA\e13 * CopyA\e44 - CopyA\e21 * CopyA\e14 * CopyA\e43 - CopyA\e41 * CopyA\e13 * CopyA\e24 + CopyA\e41 * CopyA\e14 * CopyA\e23 - CopyA\e11 * CopyA\e23 * CopyA\e44) / Cofactor_Determinant
*Inverse\e24 = (CopyA\e11 * CopyA\e23 * CopyA\e34 - CopyA\e11 * CopyA\e24 * CopyA\e33 - CopyA\e21 * CopyA\e13 * CopyA\e34 + CopyA\e21 * CopyA\e14 * CopyA\e33 + CopyA\e31 * CopyA\e13 * CopyA\e24 - CopyA\e31 * CopyA\e14 * CopyA\e23) / Cofactor_Determinant
*Inverse\e31 = (CopyA\e21 * CopyA\e32 * CopyA\e44 - CopyA\e21 * CopyA\e34 * CopyA\e42 - CopyA\e31 * CopyA\e22 * CopyA\e44 + CopyA\e31 * CopyA\e24 * CopyA\e42 + CopyA\e41 * CopyA\e22 * CopyA\e34 - CopyA\e41 * CopyA\e24 * CopyA\e32) / Cofactor_Determinant
*Inverse\e32 = (CopyA\e11 * CopyA\e34 * CopyA\e42 + CopyA\e31 * CopyA\e12 * CopyA\e44 - CopyA\e31 * CopyA\e14 * CopyA\e42 - CopyA\e41 * CopyA\e12 * CopyA\e34 + CopyA\e41 * CopyA\e14 * CopyA\e32 - CopyA\e11 * CopyA\e32 * CopyA\e44) / Cofactor_Determinant
*Inverse\e33 = (CopyA\e11 * CopyA\e22 * CopyA\e44 - CopyA\e11 * CopyA\e24 * CopyA\e42 - CopyA\e21 * CopyA\e12 * CopyA\e44 + CopyA\e21 * CopyA\e14 * CopyA\e42 + CopyA\e41 * CopyA\e12 * CopyA\e24 - CopyA\e41 * CopyA\e14 * CopyA\e22) / Cofactor_Determinant
*Inverse\e34 = (CopyA\e11 * CopyA\e24 * CopyA\e32 + CopyA\e21 * CopyA\e12 * CopyA\e34 - CopyA\e21 * CopyA\e14 * CopyA\e32 - CopyA\e31 * CopyA\e12 * CopyA\e24 + CopyA\e31 * CopyA\e14 * CopyA\e22 - CopyA\e11 * CopyA\e22 * CopyA\e34) / Cofactor_Determinant
*Inverse\e41 = (CopyA\e41 * CopyA\e23 * CopyA\e32 - CopyA\e21 * CopyA\e32 * CopyA\e43 + CopyA\e21 * CopyA\e33 * CopyA\e42 + CopyA\e31 * CopyA\e22 * CopyA\e43 - CopyA\e31 * CopyA\e23 * CopyA\e42 - CopyA\e41 * CopyA\e22 * CopyA\e33) / Cofactor_Determinant
*Inverse\e42 = (CopyA\e11 * CopyA\e32 * CopyA\e43 - CopyA\e11 * CopyA\e33 * CopyA\e42 - CopyA\e31 * CopyA\e12 * CopyA\e43 + CopyA\e31 * CopyA\e13 * CopyA\e42 + CopyA\e41 * CopyA\e12 * CopyA\e33 - CopyA\e41 * CopyA\e13 * CopyA\e32) / Cofactor_Determinant
*Inverse\e43 = (CopyA\e11 * CopyA\e23 * CopyA\e42 + CopyA\e21 * CopyA\e12 * CopyA\e43 - CopyA\e21 * CopyA\e13 * CopyA\e42 - CopyA\e41 * CopyA\e12 * CopyA\e23 + CopyA\e41 * CopyA\e13 * CopyA\e22 - CopyA\e11 * CopyA\e22 * CopyA\e43) / Cofactor_Determinant
*Inverse\e44 = (CopyA\e11 * CopyA\e22 * CopyA\e33 - CopyA\e11 * CopyA\e23 * CopyA\e32 - CopyA\e21 * CopyA\e12 * CopyA\e33 + CopyA\e21 * CopyA\e13 * CopyA\e32 + CopyA\e31 * CopyA\e12 * CopyA\e23 - CopyA\e31 * CopyA\e13 * CopyA\e22) / Cofactor_Determinant
Result.b = #True
Else
Identity(*Inverse)
Result = #False
EndIf
ProcedureReturn Result
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Format operators <<<<<
Procedure.s FormatLine1(*Matrix44A.Matrix44, Decimal = 6)
ProcedureReturn "[" + StrD(*Matrix44A\e11, Decimal) + " : " + StrD(*Matrix44A\e12, Decimal) + " : " + StrD(*Matrix44A\e13, Decimal) + " : " + StrD(*Matrix44A\e14, Decimal) + "]"
EndProcedure
Procedure.s FormatLine2(*Matrix44A.Matrix44, Decimal = 6)
ProcedureReturn "[" + StrD(*Matrix44A\e21, Decimal) + " : " + StrD(*Matrix44A\e22, Decimal) + " : " + StrD(*Matrix44A\e23, Decimal) + " : " + StrD(*Matrix44A\e24, Decimal) + "]"
EndProcedure
Procedure.s FormatLine3(*Matrix44A.Matrix44, Decimal = 6)
ProcedureReturn "[" + StrD(*Matrix44A\e31, Decimal) + " : " + StrD(*Matrix44A\e32, Decimal) + " : " + StrD(*Matrix44A\e33, Decimal) + " : " + StrD(*Matrix44A\e34, Decimal) + "]"
EndProcedure
Procedure.s FormatLine4(*Matrix44A.Matrix44, Decimal = 6)
ProcedureReturn "[" + StrD(*Matrix44A\e41, Decimal) + " : " + StrD(*Matrix44A\e42, Decimal) + " : " + StrD(*Matrix44A\e43, Decimal) + " : " + StrD(*Matrix44A\e44, Decimal) + "]"
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< The Unformat operators <<<<<
Procedure UnformatLine1(*Matrix44A.Matrix44, P_MatrixLine.s)
*Matrix44A\e11 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 1, ":"))
*Matrix44A\e12 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 2, ":"))
*Matrix44A\e13 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 3, ":"))
*Matrix44A\e14 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 4, ":"))
EndProcedure
Procedure UnformatLine2(*Matrix44A.Matrix44, P_MatrixLine.s)
*Matrix44A\e21 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 1, ":"))
*Matrix44A\e22 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 2, ":"))
*Matrix44A\e23 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 3, ":"))
*Matrix44A\e24 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 4, ":"))
EndProcedure
Procedure UnformatLine3(*Matrix44A.Matrix44, P_MatrixLine.s)
*Matrix44A\e31 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 1, ":"))
*Matrix44A\e32 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 2, ":"))
*Matrix44A\e33 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 3, ":"))
*Matrix44A\e34 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 4, ":"))
EndProcedure
Procedure UnformatLine4(*Matrix44A.Matrix44, P_MatrixLine.s)
*Matrix44A\e41 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 1, ":"))
*Matrix44A\e42 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 2, ":"))
*Matrix44A\e43 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 3, ":"))
*Matrix44A\e44 = ValD(StringField(StringField(StringField(P_MatrixLine, 2, "["), 1, "]"), 4, ":"))
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Read in Binary file <<<<<
Procedure ReadMatrix44(FileID.i, *Matrix44A.Matrix44)
*Matrix44A\e11 = ReadDouble(FileID)
*Matrix44A\e21 = ReadDouble(FileID)
*Matrix44A\e31 = ReadDouble(FileID)
*Matrix44A\e41 = ReadDouble(FileID)
*Matrix44A\e12 = ReadDouble(FileID)
*Matrix44A\e22 = ReadDouble(FileID)
*Matrix44A\e32 = ReadDouble(FileID)
*Matrix44A\e42 = ReadDouble(FileID)
*Matrix44A\e13 = ReadDouble(FileID)
*Matrix44A\e23 = ReadDouble(FileID)
*Matrix44A\e33 = ReadDouble(FileID)
*Matrix44A\e43 = ReadDouble(FileID)
*Matrix44A\e14 = ReadDouble(FileID)
*Matrix44A\e24 = ReadDouble(FileID)
*Matrix44A\e34 = ReadDouble(FileID)
*Matrix44A\e44 = ReadDouble(FileID)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Write in Binary file <<<<<
Procedure WriteMatrix44(FileID.i, *Matrix44A.Matrix44)
WriteDouble(FileID, *Matrix44A\e11)
WriteDouble(FileID, *Matrix44A\e21)
WriteDouble(FileID, *Matrix44A\e31)
WriteDouble(FileID, *Matrix44A\e41)
WriteDouble(FileID, *Matrix44A\e12)
WriteDouble(FileID, *Matrix44A\e22)
WriteDouble(FileID, *Matrix44A\e32)
WriteDouble(FileID, *Matrix44A\e42)
WriteDouble(FileID, *Matrix44A\e13)
WriteDouble(FileID, *Matrix44A\e23)
WriteDouble(FileID, *Matrix44A\e33)
WriteDouble(FileID, *Matrix44A\e43)
WriteDouble(FileID, *Matrix44A\e14)
WriteDouble(FileID, *Matrix44A\e24)
WriteDouble(FileID, *Matrix44A\e34)
WriteDouble(FileID, *Matrix44A\e44)
EndProcedure
EndModule
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code generated in : 00.002 seconds (326500.00 lines/second) <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
EDIT #1 : Bug pointed out by Olliv fixed. You have to download the source again, sorry for the inconvenience.
EDIT #2 : Some modifications to fix a particular interference with some existing instruction. I have also included a project file.
EDIT #3 : Bug correction
EDIT #4 : Bug correction
EDIT #5 : Bug correction
EDIT #6 : Bug correction
EDIT #7 : Minor Modification about the Update() Methods
EDIT #8 : Source code at version 0.9.2, Getters and Setters added for the secondary instance
EDIT #9 : Bug correction
EDIT #10 : Bug correction
EDIT #11 : Source code at version 0.9.9, Regression in the XML file methods (I'm working on it)
EDIT #12 : Minor bug correction, Suppression of no longer needed procedures
EDIT #13 : Bug correction
EDIT #14 : Source code at version 1.0.0 Beta released
EDIT #15 : Bugs Correction, Internal change
EDIT #16 : Bug Correction
EDIT #17 : Bug Correction, Help file updated
EDIT #18 : Bug Correction
EDIT #19 : Bug Correction
EDIT #20 : Bizzare unwanted behavior corrected on Windows OS
EDIT #21 : Internal change, Bug correction
EDIT #22 : Bug Correction
EDIT #23 : Bug Correction
EDIT #24 : Bug Correction, Regression : The Help is no longer available due to the WebGadget() linker error
EDIT #25 : Support of Off Module instance for "Special Methods" added.
EDIT #26 : Bug Correction
EDIT #27 : Bug Correction
Best regards
StarBootics