Matrix Operations
MatrixScaleXYZ
Scales matrix in X (first column), Y(second column) and Z (third column).
This function assumes a [4x4] matrix.
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | matIN | double* | Pointer to matrix [4x4] |
Out | matOUT | double* | Pointer to scaled matrix [4x4] |
In | X | double | Scale value for the first column |
In | Y | double | Scale value for the second column |
In | Z | double | Scale value for the third column |
Return | BOOL | Always 0 |
Usage
unsigned char MatrixScaleXYZ(double* In, double* Out, double X, double Y, double Z);
MatrixScale
Wrapper function around MatrixScaleXYZ that uses the same scale for X, Y, and Z.
This function assumes a [4x4] matrix.
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | matIN | double* | Pointer to matrix [4x4] |
Out | matOUT | double* | Pointer to scaled matrix [4x4] |
In | scale | double | Scale factor |
Return | USINT | Always 0 |
Usage
plcbit MatrixScale(double* In, double* Out, double scale);
MatrixScaleX
Function multiplies every element in a matrix of any size by a double scale factor.
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | matIN | double* | Pointer to matrix [RowxCol] |
Out | matOUT | double* | Pointer to scaled matrix [RowxCol] |
IN | scale | double | Scale factor |
In | Row | INT | Number of rows |
In | Col | INT | Number of columns |
Return | BOOL | Always 0 |
Usage
unsigned char MatrixScaleX(double* matIN, double* matOUT, double scale, signed short Row, signed short Col);
MatrixMultiply
Multiply two 4x4 double matrices
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to first matrix [4x4] |
In | b | double* | Pointer to second matrix [4x4] |
Out | product | double* | Pointer to calculated matrix [4x4] |
Return | BOOL | Always 0 |
Usage
plcbit MatrixMultiply(double* a, double* b, double* product);
MatrixMultiplyX
Multiply two size x size double matrices
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to first matrix [sizexsize] |
In | b | double* | Pointer to second matrix [sizexsize] |
Out | product | double* | Pointer to calculated matrix [sizexsize] |
In | size | INT | Number of rows/cols in the matrices |
Return | BOOL | Always 0 |
Usage
plcbit MatrixMultiplyX(double* a, double* b, double* product, signed short size);
MatrixMultipyXXX
Multiply two double matrices
- First matrix is size Row1 x Col1Row2
- Second matrix is size Col1Row2 x Col
- product is size Row1 x Col
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to first matrix [Row1xCol1Row2] |
In | b | double* | Pointer to second matrix [Col1Row2xCol] |
Out | product | double* | Pointer to calculated matrix [Row1xCol] |
In | Row1 | INT | Number of rows in matrix a |
In | Col1Row2 | INT | Number of rows in matrix b and columns in a |
In | Col | INT | Number of cols in matrix b |
Return | BOOL | Always 0 |
Usage
plcbit MatrixMultiplyXXX(double* a, double* b, double* product, signed short Row1, signed short Col1Row2, signed short Col);
MatrixIdentitiy
Set a 4x4 matrix to the identity matrix
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to a matrix [4x4] |
Return | BOOL | Always 0 |
Usage
plcbit MatrixIdentity(double* a);
MatrixTranspose
Takes the transpose of a RowxCol transformation matrix.
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | matrix | double* | Pointer to matrix [RowxCol] |
Out | matrixT | double* | Pointer to transposed matrix [ColxRow] |
In | Row | INT | Number of rows in matrix |
In | Col | INT | Number of columns in matrix |
Return | BOOL | Always 0 |
Usage
Trans_Matrix_typ matrix;
Trans_Matrix_typ matrixT;
plcbit MatrixTranspose( (double*) matrix, (double*) matrixT, Row, Col);
MatrixInverse
Takes the inverse of a 4x4 affine transformation matrix.
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | In | double* | Pointer to matrix [4x4] |
Out | Out | double* | Pointer to inverted matrix [4x4] |
Return | BOOL | 0 on success, 1 if m * m^-1 != Identity |
Usage
Trans_Matrix_typ m;
Trans_Matrix_typ mI;
bool inverseFailed = MatrixInverse( (double*) m, (double*) mI);
MatrixInverseGeneral
Find the inverse of a square matrix of the size Size x Size.
(Slow - not recommended for cyclic operation)
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | In | double* | Pointer to matrix [SizexSize] |
In | Size | UDINT | Number of rows/cols in the matrix |
Out | Out | double* | Pointer to inverted matrix [SizexSize] |
Return | BOOL | 0 on success, 1 if the determinant is 0 |
Usage
plcbit MatrixInverseGeneral(double* In, double* Out, unsigned long Size);
PsuedoInverse
Psuedo Inverse using the Moore–Penrose inverse
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to matrix [rowsxcols] to be inverted |
Out | aI | double* | Pointer to inverted matrix [colsxrows] |
In | rows | USINT | Number of rows in matrix a |
In | cols | USINT | Number of columns in matrix a |
Return | BOOL | Always 0 |
Usage
plcbit PsuedoInverse(double* a, double* aI, unsigned short rows, unsigned short cols);
SVD
Implementation of the Singular value decomposition function
Parameters
Direction | Name | Type | Description |
---|---|---|---|
In | a | double* | Pointer to matrix [rowsxcols] |
In | rows | USINT | Number of rows in the matrix |
In | cols | USINT | Number of columns in the matrix |
In | u | double* | Pointer containing matrix u[rows x cols] |
In | s | double* | Pointer containing matrix s[cols x cols] |
In | v | double* | Pointer containing matrix v[cols x cols] |
Return | BOOL | Always 0 |
Usage
plcbit SVD(double* a, unsigned short rows, unsigned short cols, double* u, double* s, double* v);