Difference between revisions of "IC Python API:RLPy RMatrix3"
Chuck (RL) (Talk | contribs) (Created page with "{{TOC}} {{Parent|IC_Python_API:RL_Python_Modules|Modules}} ==Detailed Description== This class represent the 3x3 matrix. ==Operators== This class supports the following operat...") |
Chuck (RL) (Talk | contribs) m |
||
Line 1: | Line 1: | ||
{{TOC}} | {{TOC}} | ||
{{Parent|IC_Python_API:RL_Python_Modules|Modules}} | {{Parent|IC_Python_API:RL_Python_Modules|Modules}} | ||
− | ==Detailed Description== | + | {{last_modified}} |
− | This class represent the 3x3 matrix. | + | |
− | + | == Detailed Description == | |
− | + | ||
− | + | This class represent the 3x3 matrix. iClone uses row-major order where consecutive elements of a row reside next to each other, and the data is read from left to right, top to bottom, in a vertical zig-zag. This class provides access to RLPy's internal 3x3 matrix operators and related functions. | |
− | + | ||
− | + | == Operators == | |
− | + | ||
− | + | === + === | |
− | + | ||
− | + | The "addition" operator. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 2, 2, 2, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_result = matrix3_a + matrix3_b | ||
+ | print( matrix3_result.GetRow(0)[0] == 1+2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[1] == 2+2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[2] == 3+2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === - === | |
− | + | ||
− | === | + | The "subtraction" operator. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 2, 2, 2, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_result = matrix3_a - matrix3_b | ||
+ | print( matrix3_result.GetRow(0)[0] == 1-2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[1] == 2-2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[2] == 3-2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === * === |
− | + | ||
− | + | The "multiplication" operator. | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 2, 0, 0, | ||
+ | 2, 0, 0, | ||
+ | 2, 0, 0 ) | ||
+ | matrix3_result = matrix3_a * matrix3_b | ||
+ | print( matrix3_result.GetRow(0)[0] == 1*2 + 2*2 + 3*2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === / === |
− | + | ||
− | + | The "division" operator. | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_result = matrix3_a / 2 | ||
+ | print( matrix3_result.GetRow(0)[0] == 1/2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[1] == 2/2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[2] == 3/2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === - === |
− | + | ||
− | + | The "unary minus" . | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3 | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_result = -matrix3_a | ||
+ | print( matrix3_result.GetRow(0)[0] == -1 ) # true | ||
+ | print( matrix3_result.GetRow(0)[1] == -2 ) # true | ||
+ | print( matrix3_result.GetRow(0)[2] == -3 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === == === | |
− | + | ||
− | ==== | + | The "equal to" operator. Performs a one-by-one comparison of the matrix array. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_a == matrix3_b ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === != === | |
+ | |||
+ | The "not equal to" operator. Performs a one-by-one comparison of the matrix array. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 4, 5, 6, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_a != matrix3_b ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === > === | |
− | + | The "greater than" operator. Performs a one-by-one comparison of the matrix array. | |
− | + | <syntaxhighlight lang="Python"> | |
+ | matrix3_a = RLPy.RMatrix3( 2, 0, 0, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 5, 0, 0, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_b >matrix3_a ) # true | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === >= === | ||
+ | |||
+ | The "greater than or equal to" operator. Performs a one-by-one comparison of the matrix array. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 1, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 1, 1, 9, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_b >= matrix3_a ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === < === | |
− | + | ||
− | === | + | The "less than" operator. Performs a one-by-one comparison of the matrix array. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 2, 0, 0, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 5, 0, 0, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_a< matrix3_b ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === <= === | |
− | + | ||
− | === | + | The "less than" operator. Performs a one-by-one comparison of the matrix array. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_a = RLPy.RMatrix3( 1, 1, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3_b = RLPy.RMatrix3( 1, 1, 9, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3_a<= matrix3_b ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === += === | |
− | + | ||
− | === | + | The "addition assignment" operator. |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3 += RLPy.RMatrix3( 2, 2, 2, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3.GetRow(0)[0] == 1+2 ) # true | ||
+ | print( matrix3.GetRow(0)[1] == 2+2 ) # true | ||
+ | print( matrix3.GetRow(0)[2] == 3+2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === -= === |
− | + | ||
− | + | The "subtraction assignment" operator. | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3 -= RLPy.RMatrix3( 2, 2, 2, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | print( matrix3.GetRow(0)[0] == 1-2 ) # true | ||
+ | print( matrix3.GetRow(0)[1] == 2-2 ) # true | ||
+ | print( matrix3.GetRow(0)[2] == 3-2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === *= === |
− | + | ||
− | + | The "multiplication assignment" operator. For the calculation method, refer to the '''*''' operator. | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3 *= 2 | ||
+ | print( matrix3.GetRow(0)[0] == 1*2 ) # true | ||
+ | print( matrix3.GetRow(0)[1] == 2*2 ) # true | ||
+ | print( matrix3.GetRow(0)[2] == 3*2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === /= === |
− | + | ||
− | + | The "division assignment" operator. For the calculation method, refer to the '''/''' operator. | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3( 1, 2, 3, |
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | matrix3 /= 2 | ||
+ | print( matrix3.GetRow(0)[0] == 1/2 ) # true | ||
+ | print( matrix3.GetRow(0)[1] == 2/2 ) # true | ||
+ | print( matrix3.GetRow(0)[2] == 3/2 ) # true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | == Member Functions == | |
+ | |||
+ | === MakeIdentity ( self ) === | ||
+ | |||
+ | This function can be used to initialize the 3x3 matrix. It is equivalent to setting the matrix to: | ||
+ | |||
+ | :[1 0 0 0] | ||
+ | :[0 1 0 0] | ||
+ | :[0 0 1 0] | ||
+ | :[0 0 0 1] | ||
+ | |||
+ | ==== Returns ==== | ||
+ | |||
+ | This object - RLPy.RMatrix3 | ||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3() |
+ | matrix3.MakeIdentity() | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | '''nRow''' [IN] Index of the row in the matrix - int | + | === M ( self, args ) === |
+ | |||
+ | Get the value of an element in a 3x3 matrix by row and column index. | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | :'''nRow''' [IN] Index of the row in the matrix - int | ||
+ | :'''nCol''' [IN] Index of the column in the matrix - int | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns the matrix element specified by row and col - float* | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3.MakeIdentity ( | + | matrix3 = RLPy.RMatrix3() |
+ | matrix3.MakeIdentity() | ||
+ | |||
+ | print(matrix3.M(0,0)) # <Swig Object of type 'float *' at 0x0000020316B015A0> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | ==== | + | === E ( self, args ) === |
− | + | ||
− | + | Get the value of an element in a 3x3 matrix by index number (from 0 to 8); | |
− | + | ||
− | === | + | ==== Parameters ==== |
+ | :'''nRow''' [IN] Index of the matrix. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns the matrix element specified by index - float* | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3() |
+ | matrix3.MakeIdentity() | ||
+ | |||
+ | print(matrix3.E(0)) # | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | ==== | + | === GetRow ( self, nRow ) === |
− | + | ||
− | + | Obtain an array of element values within a given row inside a 3x3 matrix. | |
− | + | ||
− | === | + | ==== Parameters ==== |
+ | :'''nRow''' [IN] Index of the row in the matrix - int | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns the row vector of the matrix - RLPy.RVector3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3() |
+ | matrix3.MakeIdentity() | ||
+ | row0 = matrix3.GetRow(0) | ||
+ | |||
+ | print(row0[0]) | ||
+ | print(row0[1]) | ||
+ | print(row0[2]) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | ==== | + | === GetColumn( self, nCol ) === |
− | + | ||
− | + | Obtain an array of element values within a given column inside a 3x3 matrix. | |
− | + | ||
− | === | + | ==== Parameters ==== |
+ | :'''nCol''' [IN] Index of the row in the matrix - int | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns the column vector of the matrix - RLPy.RVector3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3 = RLPy.RMatrix3() |
+ | matrix3.MakeIdentity() | ||
+ | col0 = matrix3.GetColumn(0) | ||
+ | print(col0[0]) | ||
+ | print(col0[1]) | ||
+ | print(col0[2]) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | === | + | === Transpose( self ) === |
− | + | ||
− | + | Obtain the transposed matrix by transposing the current m * n matrix into an n * m matrix by row-column swapping. | |
− | - | + | |
− | === | + | ==== Returns ==== |
+ | :Returns a new matrix containing this matrix's transpose - RLPy.RMatrix3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3 | + | matrix3_orgin = RLPy.RMatrix3( 1, 2, 3, |
+ | 4, 5, 6, | ||
+ | 7, 8, 9 ) | ||
+ | matrix3_transpose = matrix3_orgin.Transpose() | ||
+ | row0 = matrix3_orgin.GetRow(0) | ||
+ | col0 = matrix3_transpose.GetColumn(0) | ||
+ | |||
+ | print(row0[0] == col0[0]) | ||
+ | print(row0[1] == col0[1]) | ||
+ | print(row0[2] == col0[2]) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | === TransposeTimes( self, mM ) === | ||
+ | |||
+ | Multiply a transposed version of a 3x3 matrix with itself. | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | :'''mM''' [IN] the matrix - RLPy.RMatrix3 | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns a new matrix. (this^T * mM) - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_orgin = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 4, 5, 6, | ||
+ | 7, 8, 9 ) | ||
+ | matrix3_transpose_value = RLPy.RMatrix3( 2, 0, 0, | ||
+ | 0, 2, 0, | ||
+ | 0, 0, 2 ) | ||
+ | matrix3_transpose_times = matrix3_orgin.TransposeTimes(matrix3_transpose_value) | ||
+ | row0 = matrix3_orgin.GetRow(0) | ||
+ | col0 = matrix3_transpose_times.GetColumn(0) | ||
+ | |||
+ | print(row0[0]*2 == col0[0]) | ||
+ | print(row0[1]*2 == col0[1]) | ||
+ | print(row0[2]*2 == col0[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === TimesTranspose( self, mM ) === | ||
+ | |||
+ | Multiply a given 3x3 matrix with a transposed version of itself. | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | :'''mM''' [IN] the matrix - RLPy.RMatrix3 | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns a new matrix. (this * M^T) - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_orgin = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 4, 5, 6, | ||
+ | 7, 8, 9 ) | ||
+ | matrix3_transpose_value = RLPy.RMatrix3( 3, 0, 0, | ||
+ | 0, 3, 0, | ||
+ | 0, 0, 3 ) | ||
+ | matrix3_times_transpose = matrix3_orgin.TimesTranspose(matrix3_transpose_value) | ||
+ | row0 = matrix3_orgin.GetColumn(0) | ||
+ | col0 = matrix3_times_transpose.GetColumn(0) | ||
+ | |||
+ | print(row0[0]*3 == col0[0]) | ||
+ | print(row0[1]*3 == col0[1]) | ||
+ | print(row0[2]*3 == col0[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Inverse( self ) === | ||
+ | |||
+ | Invert a given 3x3 matrix. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns a new matrix containing this matrix's inverse - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 2, 3, 4, | ||
+ | 4, 2, 1 ) | ||
+ | matrix3_inverse = matrix3_value.Inverse() | ||
+ | row0 = matrix3_inverse.GetRow(0) | ||
+ | print(row0[0]) | ||
+ | print(row0[1]) | ||
+ | print(row0[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Adjoint( self ) === | ||
+ | |||
+ | Adjugate a given 3x3 matrix. | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 2, 3, 4, | ||
+ | 4, 2, 1 ) | ||
+ | matrix3_Adjoint = matrix3_value.Adjoint() | ||
+ | row0 = matrix3_Adjoint.GetRow(0) | ||
+ | |||
+ | print(row0[0]) | ||
+ | print(row0[1]) | ||
+ | print(row0[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Returns ==== | ||
+ | |||
+ | Returns a new matrix containing this matrix's adjoint - RLPy.RMatrix3 | ||
+ | |||
+ | === AdjointTranspose( self ) === | ||
+ | |||
+ | Adjugate and transpose a given 3x3 matrix. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns a new matrix - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 2, 3, 4, | ||
+ | 4, 2, 1 ) | ||
+ | matrix3_Adjoint_transpose = matrix3_value.AdjointTranspose() | ||
+ | col0_Adjoint_transpose = matrix3_Adjoint_transpose.GetColumn(0) | ||
+ | |||
+ | print(col0_Adjoint_transpose[0]) | ||
+ | print(col0_Adjoint_transpose[1]) | ||
+ | print(col0_Adjoint_transpose[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === InverseTranspose( self ) === | ||
+ | |||
+ | Invert and transpose a given 3x3 matrix. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns a new matrix - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 2, 3, 4, | ||
+ | 4, 2, 1 ) | ||
+ | matrix3_inverse_transpose = matrix3_value.InverseTranspose() | ||
+ | row0_inverse_transpose = matrix3_inverse_transpose.GetRow(0) | ||
+ | |||
+ | print(row0_inverse_transpose[0]) | ||
+ | print(row0_inverse_transpose[1]) | ||
+ | print(row0_inverse_transpose[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Determinant( self ) === | ||
+ | |||
+ | Obtain the scalar value for a given 3x3 matrix. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Returns the determinant of the matrix - float | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 2, 3, | ||
+ | 2, 3, 4, | ||
+ | 4, 2, 1 ) | ||
+ | |||
+ | print(matrix3_value.Determinant()) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === MaxColumn( self ) === | ||
+ | |||
+ | Find the maximum absolute value within a 3x3 matrix, and return the column in which the value is located. If all of the elements within the 3x3 matrix are 0 then return -1. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return index of column of M containing maximum abs entry, or -1 if M = 0 - int | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 10, 20, -30, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | |||
+ | print(matrix3_value.MaxColumn()) # column:2 ->abs(-30) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === MaxRow( self ) === | ||
+ | |||
+ | Find the maximum absolute value within a 3x3 matrix, and return the row in which the value is located. If all of the elements within the 3x3 matrix are 0 then return -1. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return index of row of M containing maximum abs entry, or -1 if M = 0 - int | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 10, 0, 0, | ||
+ | 20, 0, 0, | ||
+ | -30, 0, 0 ) | ||
+ | |||
+ | print(matrix3_value.MaxRow()) # Row:2 ->abs(-30) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === OneNorm( self ) === | ||
+ | |||
+ | Return the sum of the column elements that contain the largest absolute values. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return Norm - float | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_row_value = RLPy.RMatrix3( 10, 0, 0, | ||
+ | 20, 0, 0, | ||
+ | -30, 0, 0 ) | ||
+ | |||
+ | print(matrix3_row_value.OneNorm()) # 10+20+abs(-30) = 60 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === InfNorm( self ) === | ||
+ | |||
+ | Return the sum of the row elements that contain the largest absolute values. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return InfNorm - float | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_column_value = RLPy.RMatrix3( 10, 20, -30, | ||
+ | 0, 0, 0, | ||
+ | 0, 0, 0 ) | ||
+ | |||
+ | print(matrix3_column_value.InfNorm()) # 10+20+abs(-30) = 60 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === FromAxisAngle( self, rkAxis, fAngle ) === | ||
+ | |||
+ | Rotation matrix from axis angle。 | ||
+ | |||
+ | ==== Parameters ==== | ||
+ | :'''rkAxis''' [IN] axis vector - RLPy.RVector3 | ||
+ | :'''fAngle''' [IN] angle in radians - float | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return a new matrix from specified axis angle - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_orgin = RLPy.RMatrix3() | ||
+ | matrix3_orgin.MakeIdentity() | ||
+ | |||
+ | x_axis_vector = RLPy.RVector3( 1, 0, 0 ) # axis = "X" | ||
+ | y_axis_vector = RLPy.RVector3( 0, 1, 0 ) # axis = "Y" | ||
+ | z_axis_vector = RLPy.RVector3( 0, 0, 1 ) # axis = "Z" | ||
+ | |||
+ | matrix3_orgin.FromAxisAngle( x_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
+ | matrix3_orgin.FromAxisAngle( y_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
+ | matrix3_orgin.FromAxisAngle( z_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === RotationX( self, fAngle ) === | ||
+ | |||
Rotation matrix for rotations around x-axis. | Rotation matrix for rotations around x-axis. | ||
− | |||
− | |||
− | + | ==== Parameters ==== | |
− | + | fAngle [IN] angle in radians - float | |
− | ====Returns==== | + | |
− | + | ==== Returns ==== | |
− | + | :Return a new matrix of for rotations around x-axis - RLPy.RMatrix3 | |
− | + | ||
− | + | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_orgin = RLPy.RMatrix3() |
+ | matrix3_orgin.MakeIdentity() | ||
+ | matrix3_orgin.RotationX( 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | '''fAngle''' [IN] angle in radians - float | + | === RotationY( self, fAngle ) === |
− | + | ||
− | ====Returns==== | + | Rotate a given 3x3 matrix around the y-axis。 |
− | + | ||
− | + | ==== Parameters ==== | |
− | + | :'''fAngle''' [IN] angle in radians - float | |
− | + | ||
+ | ==== Returns ==== | ||
+ | :Return a new matrix of for rotations around y-axis - RLPy.RMatrix3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_orgin = RLPy.RMatrix3() |
+ | matrix3_orgin.MakeIdentity() | ||
+ | matrix3_orgin.RotationY( 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | '''fAngle''' [IN] angle in radians - float | + | === RotationZ( self, fAngle ) === |
− | + | ||
− | ====Returns==== | + | Rotation a given 3x3 matrix around the z-axis. |
− | + | ||
− | + | ==== Parameters ==== | |
− | + | :'''fAngle''' [IN] angle in radians - float | |
− | + | ||
+ | ==== Returns ==== | ||
+ | :Return a new 3x3 matrix of for rotations around z-axis - RLPy.RMatrix3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_orgin = RLPy.RMatrix3() |
+ | matrix3_orgin.MakeIdentity() | ||
+ | matrix3_orgin.RotationZ( 90 * RLPy.RMath.CONST_DEG_TO_RAD ) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === AccuScale( self, rkScale ) === | |
− | + | ||
− | ====Returns==== | + | Accumulate 3x3 matrix with scale vector. |
− | + | ||
− | + | ==== Parameters ==== | |
− | + | rkScale [IN] Scale vector - RLPy.RVector3 | |
− | + | ||
+ | ==== Returns ==== | ||
+ | :Return a new matrix - RLPy.RMatrix3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_orgin = RLPy.RMatrix3() |
+ | matrix3_orgin.MakeIdentity() | ||
+ | scale_vector = RLPy.RVector3( 2, 2, 2 ) | ||
+ | matrix3_orgin.AccuScale(scale_vector) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | + | === ToEulerAngle( self, rkScaleself, Order, rx, ry, rz ) === | |
− | + | Convert matrix to Euler angles. | |
− | '''ry''' [OUT] return angle of y-axis in radians - float | + | ==== Parameters ==== |
+ | :'''Order''' [IN] Euler order - RLPy.Rotation_Order | ||
+ | :'''rx''' [OUT] return angle of x-axis in radians - float | ||
+ | :'''ry''' [OUT] return angle of y-axis in radians - float | ||
+ | :'''rz''' [OUT] return angle of z-axis in radians - float | ||
− | |||
− | |||
− | |||
− | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_value = RLPy.RMatrix3( -0, -0, 1, |
+ | 0, -1, -0, | ||
+ | 1, 0, -0 ) | ||
+ | euler_angle_x = 0 | ||
+ | euler_angle_y = 0 | ||
+ | euler_angle_z = 0 | ||
+ | result = matrix3_value.ToEulerAngle( RLPy.EEulerOrder_XYZ, euler_angle_x, euler_angle_y, euler_angle_z ) | ||
+ | |||
+ | print(result[0] * RLPy.RMath.CONST_RAD_TO_DEG) # 180 | ||
+ | print(result[1] * RLPy.RMath.CONST_RAD_TO_DEG) # 90 | ||
+ | print(result[2] * RLPy.RMath.CONST_RAD_TO_DEG) # 0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ||
− | ==== | + | === FromEulerAngle( self, Order, rx, ry, rz ) === |
− | + | ||
− | + | Convert Euler angle to a 3x3 matrix. | |
− | ----- | + | |
− | === | + | ==== Parameters ==== |
+ | :'''Order''' [IN] Euler order - RLPy.Rotation_Order | ||
+ | :'''rx''' [IN] return angle of x-axis in radians - float | ||
+ | :'''ry''' [IN] return angle of y-axis in radians - float | ||
+ | :'''rz''' [IN] return angle of z-axis in radians - float | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return a new matrix from specified axis angle - RLPy.RMatrix3 | ||
+ | |||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> | ||
− | RLPy.RMatrix3. | + | matrix3_orgin = RLPy.RMatrix3() |
+ | euler_angle_x = 90 * RLPy.RMath.CONST_DEG_TO_RAD | ||
+ | euler_angle_y = 0 | ||
+ | euler_angle_z = 0 | ||
+ | matrix3_result = matrix3_orgin.FromEulerAngle( RLPy.EEulerOrder_XYZ, euler_angle_x, euler_angle_y, euler_angle_z) | ||
+ | row0 = matrix3_result[0].GetRow(0) | ||
+ | |||
+ | print(row0[0]) | ||
+ | print(row0[1]) | ||
+ | print(row0[2]) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
− | |||
− | |||
− | ''' | + | === FromSphereUnitVec( self, rkVec ) === |
− | </ | + | |
− | ====Returns==== | + | Convert Euler angle to matrix. |
− | < | + | |
− | </ | + | ==== Parameters ==== |
+ | :'''rkVec''' [IN] vector - RLPy.RVector3 | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :Return a new 3x3 matrix from sphere unit vector - RLPy.RMatrix3 | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | vector = RLPy.RVector3( 0, 1, 0 ) | ||
+ | matrix3_result = RLPy.RMatrix3().FromSphereUnitVec( vector ) | ||
+ | row0 = matrix3_result.GetRow(0) | ||
+ | |||
+ | print(row0[0]) | ||
+ | print(row0[1]) | ||
+ | print(row0[2]) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === IsRightHandCoordinate( self ) === | ||
+ | |||
+ | Obtain the 3x3 matrix's coordinate system. '''True''' stands for right-handed coordinate system while ''''False''' for left-handed. | ||
+ | |||
+ | ==== Returns ==== | ||
+ | :'''True''' Right hand coordinate - bool | ||
+ | :'''False''' Left hand coordinate - bool | ||
+ | |||
+ | <syntaxhighlight lang="Python"> | ||
+ | matrix3_value = RLPy.RMatrix3( 1, 0, 0, | ||
+ | 0, 1, 0, | ||
+ | 0, 0, 1 ) | ||
+ | result = matrix3_value.IsRightHandCoordinate() | ||
+ | |||
+ | print(result) | ||
+ | </syntaxhighlight> |
Revision as of 22:04, 24 February 2020
Contents
- 1 Detailed Description
- 2 Operators
- 3 Member Functions
- 3.1 MakeIdentity ( self )
- 3.2 M ( self, args )
- 3.3 E ( self, args )
- 3.4 GetRow ( self, nRow )
- 3.5 GetColumn( self, nCol )
- 3.6 Transpose( self )
- 3.7 TransposeTimes( self, mM )
- 3.8 TimesTranspose( self, mM )
- 3.9 Inverse( self )
- 3.10 Adjoint( self )
- 3.11 AdjointTranspose( self )
- 3.12 InverseTranspose( self )
- 3.13 Determinant( self )
- 3.14 MaxColumn( self )
- 3.15 MaxRow( self )
- 3.16 OneNorm( self )
- 3.17 InfNorm( self )
- 3.18 FromAxisAngle( self, rkAxis, fAngle )
- 3.19 RotationX( self, fAngle )
- 3.20 RotationY( self, fAngle )
- 3.21 RotationZ( self, fAngle )
- 3.22 AccuScale( self, rkScale )
- 3.23 ToEulerAngle( self, rkScaleself, Order, rx, ry, rz )
- 3.24 FromEulerAngle( self, Order, rx, ry, rz )
- 3.25 FromSphereUnitVec( self, rkVec )
- 3.26 IsRightHandCoordinate( self )
- Main article: Modules.
- Last modified: 02/24/2020
Detailed Description
This class represent the 3x3 matrix. iClone uses row-major order where consecutive elements of a row reside next to each other, and the data is read from left to right, top to bottom, in a vertical zig-zag. This class provides access to RLPy's internal 3x3 matrix operators and related functions.
Operators
+
The "addition" operator.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 2, 2, 2,
0, 0, 0,
0, 0, 0 )
matrix3_result = matrix3_a + matrix3_b
print( matrix3_result.GetRow(0)[0] == 1+2 ) # true
print( matrix3_result.GetRow(0)[1] == 2+2 ) # true
print( matrix3_result.GetRow(0)[2] == 3+2 ) # true
-
The "subtraction" operator.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 2, 2, 2,
0, 0, 0,
0, 0, 0 )
matrix3_result = matrix3_a - matrix3_b
print( matrix3_result.GetRow(0)[0] == 1-2 ) # true
print( matrix3_result.GetRow(0)[1] == 2-2 ) # true
print( matrix3_result.GetRow(0)[2] == 3-2 ) # true
*
The "multiplication" operator.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 2, 0, 0,
2, 0, 0,
2, 0, 0 )
matrix3_result = matrix3_a * matrix3_b
print( matrix3_result.GetRow(0)[0] == 1*2 + 2*2 + 3*2 ) # true
/
The "division" operator.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_result = matrix3_a / 2
print( matrix3_result.GetRow(0)[0] == 1/2 ) # true
print( matrix3_result.GetRow(0)[1] == 2/2 ) # true
print( matrix3_result.GetRow(0)[2] == 3/2 ) # true
-
The "unary minus" .
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_result = -matrix3_a
print( matrix3_result.GetRow(0)[0] == -1 ) # true
print( matrix3_result.GetRow(0)[1] == -2 ) # true
print( matrix3_result.GetRow(0)[2] == -3 ) # true
==
The "equal to" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
print( matrix3_a == matrix3_b ) # true
!=
The "not equal to" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 4, 5, 6,
0, 0, 0,
0, 0, 0 )
print( matrix3_a != matrix3_b ) # true
>
The "greater than" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 2, 0, 0,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 5, 0, 0,
0, 0, 0,
0, 0, 0 )
print( matrix3_b >matrix3_a ) # true
>=
The "greater than or equal to" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 1, 1, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 1, 1, 9,
0, 0, 0,
0, 0, 0 )
print( matrix3_b >= matrix3_a ) # true
<
The "less than" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 2, 0, 0,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 5, 0, 0,
0, 0, 0,
0, 0, 0 )
print( matrix3_a< matrix3_b ) # true
<=
The "less than" operator. Performs a one-by-one comparison of the matrix array.
matrix3_a = RLPy.RMatrix3( 1, 1, 3,
0, 0, 0,
0, 0, 0 )
matrix3_b = RLPy.RMatrix3( 1, 1, 9,
0, 0, 0,
0, 0, 0 )
print( matrix3_a<= matrix3_b ) # true
+=
The "addition assignment" operator.
matrix3 = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3 += RLPy.RMatrix3( 2, 2, 2,
0, 0, 0,
0, 0, 0 )
print( matrix3.GetRow(0)[0] == 1+2 ) # true
print( matrix3.GetRow(0)[1] == 2+2 ) # true
print( matrix3.GetRow(0)[2] == 3+2 ) # true
-=
The "subtraction assignment" operator.
matrix3 = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3 -= RLPy.RMatrix3( 2, 2, 2,
0, 0, 0,
0, 0, 0 )
print( matrix3.GetRow(0)[0] == 1-2 ) # true
print( matrix3.GetRow(0)[1] == 2-2 ) # true
print( matrix3.GetRow(0)[2] == 3-2 ) # true
*=
The "multiplication assignment" operator. For the calculation method, refer to the * operator.
matrix3 = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3 *= 2
print( matrix3.GetRow(0)[0] == 1*2 ) # true
print( matrix3.GetRow(0)[1] == 2*2 ) # true
print( matrix3.GetRow(0)[2] == 3*2 ) # true
/=
The "division assignment" operator. For the calculation method, refer to the / operator.
matrix3 = RLPy.RMatrix3( 1, 2, 3,
0, 0, 0,
0, 0, 0 )
matrix3 /= 2
print( matrix3.GetRow(0)[0] == 1/2 ) # true
print( matrix3.GetRow(0)[1] == 2/2 ) # true
print( matrix3.GetRow(0)[2] == 3/2 ) # true
Member Functions
MakeIdentity ( self )
This function can be used to initialize the 3x3 matrix. It is equivalent to setting the matrix to:
- [1 0 0 0]
- [0 1 0 0]
- [0 0 1 0]
- [0 0 0 1]
Returns
This object - RLPy.RMatrix3
matrix3 = RLPy.RMatrix3()
matrix3.MakeIdentity()
M ( self, args )
Get the value of an element in a 3x3 matrix by row and column index.
Parameters
- nRow [IN] Index of the row in the matrix - int
- nCol [IN] Index of the column in the matrix - int
Returns
- Returns the matrix element specified by row and col - float*
matrix3 = RLPy.RMatrix3()
matrix3.MakeIdentity()
print(matrix3.M(0,0)) # <Swig Object of type 'float *' at 0x0000020316B015A0>
E ( self, args )
Get the value of an element in a 3x3 matrix by index number (from 0 to 8);
Parameters
- nRow [IN] Index of the matrix.
Returns
- Returns the matrix element specified by index - float*
matrix3 = RLPy.RMatrix3()
matrix3.MakeIdentity()
print(matrix3.E(0)) #
GetRow ( self, nRow )
Obtain an array of element values within a given row inside a 3x3 matrix.
Parameters
- nRow [IN] Index of the row in the matrix - int
Returns
- Returns the row vector of the matrix - RLPy.RVector3
matrix3 = RLPy.RMatrix3()
matrix3.MakeIdentity()
row0 = matrix3.GetRow(0)
print(row0[0])
print(row0[1])
print(row0[2])
GetColumn( self, nCol )
Obtain an array of element values within a given column inside a 3x3 matrix.
Parameters
- nCol [IN] Index of the row in the matrix - int
Returns
- Returns the column vector of the matrix - RLPy.RVector3
matrix3 = RLPy.RMatrix3()
matrix3.MakeIdentity()
col0 = matrix3.GetColumn(0)
print(col0[0])
print(col0[1])
print(col0[2])
Transpose( self )
Obtain the transposed matrix by transposing the current m * n matrix into an n * m matrix by row-column swapping.
Returns
- Returns a new matrix containing this matrix's transpose - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3( 1, 2, 3,
4, 5, 6,
7, 8, 9 )
matrix3_transpose = matrix3_orgin.Transpose()
row0 = matrix3_orgin.GetRow(0)
col0 = matrix3_transpose.GetColumn(0)
print(row0[0] == col0[0])
print(row0[1] == col0[1])
print(row0[2] == col0[2])
TransposeTimes( self, mM )
Multiply a transposed version of a 3x3 matrix with itself.
Parameters
- mM [IN] the matrix - RLPy.RMatrix3
Returns
- Returns a new matrix. (this^T * mM) - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3( 1, 2, 3,
4, 5, 6,
7, 8, 9 )
matrix3_transpose_value = RLPy.RMatrix3( 2, 0, 0,
0, 2, 0,
0, 0, 2 )
matrix3_transpose_times = matrix3_orgin.TransposeTimes(matrix3_transpose_value)
row0 = matrix3_orgin.GetRow(0)
col0 = matrix3_transpose_times.GetColumn(0)
print(row0[0]*2 == col0[0])
print(row0[1]*2 == col0[1])
print(row0[2]*2 == col0[2])
TimesTranspose( self, mM )
Multiply a given 3x3 matrix with a transposed version of itself.
Parameters
- mM [IN] the matrix - RLPy.RMatrix3
Returns
- Returns a new matrix. (this * M^T) - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3( 1, 2, 3,
4, 5, 6,
7, 8, 9 )
matrix3_transpose_value = RLPy.RMatrix3( 3, 0, 0,
0, 3, 0,
0, 0, 3 )
matrix3_times_transpose = matrix3_orgin.TimesTranspose(matrix3_transpose_value)
row0 = matrix3_orgin.GetColumn(0)
col0 = matrix3_times_transpose.GetColumn(0)
print(row0[0]*3 == col0[0])
print(row0[1]*3 == col0[1])
print(row0[2]*3 == col0[2])
Inverse( self )
Invert a given 3x3 matrix.
Returns
- Returns a new matrix containing this matrix's inverse - RLPy.RMatrix3
matrix3_value = RLPy.RMatrix3( 1, 2, 3,
2, 3, 4,
4, 2, 1 )
matrix3_inverse = matrix3_value.Inverse()
row0 = matrix3_inverse.GetRow(0)
print(row0[0])
print(row0[1])
print(row0[2])
Adjoint( self )
Adjugate a given 3x3 matrix.
matrix3_value = RLPy.RMatrix3( 1, 2, 3,
2, 3, 4,
4, 2, 1 )
matrix3_Adjoint = matrix3_value.Adjoint()
row0 = matrix3_Adjoint.GetRow(0)
print(row0[0])
print(row0[1])
print(row0[2])
Returns
Returns a new matrix containing this matrix's adjoint - RLPy.RMatrix3
AdjointTranspose( self )
Adjugate and transpose a given 3x3 matrix.
Returns
- Returns a new matrix - RLPy.RMatrix3
matrix3_value = RLPy.RMatrix3( 1, 2, 3,
2, 3, 4,
4, 2, 1 )
matrix3_Adjoint_transpose = matrix3_value.AdjointTranspose()
col0_Adjoint_transpose = matrix3_Adjoint_transpose.GetColumn(0)
print(col0_Adjoint_transpose[0])
print(col0_Adjoint_transpose[1])
print(col0_Adjoint_transpose[2])
InverseTranspose( self )
Invert and transpose a given 3x3 matrix.
Returns
- Returns a new matrix - RLPy.RMatrix3
matrix3_value = RLPy.RMatrix3( 1, 2, 3,
2, 3, 4,
4, 2, 1 )
matrix3_inverse_transpose = matrix3_value.InverseTranspose()
row0_inverse_transpose = matrix3_inverse_transpose.GetRow(0)
print(row0_inverse_transpose[0])
print(row0_inverse_transpose[1])
print(row0_inverse_transpose[2])
Determinant( self )
Obtain the scalar value for a given 3x3 matrix.
Returns
- Returns the determinant of the matrix - float
matrix3_value = RLPy.RMatrix3( 1, 2, 3,
2, 3, 4,
4, 2, 1 )
print(matrix3_value.Determinant())
MaxColumn( self )
Find the maximum absolute value within a 3x3 matrix, and return the column in which the value is located. If all of the elements within the 3x3 matrix are 0 then return -1.
Returns
- Return index of column of M containing maximum abs entry, or -1 if M = 0 - int
matrix3_value = RLPy.RMatrix3( 10, 20, -30,
0, 0, 0,
0, 0, 0 )
print(matrix3_value.MaxColumn()) # column:2 ->abs(-30)
MaxRow( self )
Find the maximum absolute value within a 3x3 matrix, and return the row in which the value is located. If all of the elements within the 3x3 matrix are 0 then return -1.
Returns
- Return index of row of M containing maximum abs entry, or -1 if M = 0 - int
matrix3_value = RLPy.RMatrix3( 10, 0, 0,
20, 0, 0,
-30, 0, 0 )
print(matrix3_value.MaxRow()) # Row:2 ->abs(-30)
OneNorm( self )
Return the sum of the column elements that contain the largest absolute values.
Returns
- Return Norm - float
matrix3_row_value = RLPy.RMatrix3( 10, 0, 0,
20, 0, 0,
-30, 0, 0 )
print(matrix3_row_value.OneNorm()) # 10+20+abs(-30) = 60
InfNorm( self )
Return the sum of the row elements that contain the largest absolute values.
Returns
- Return InfNorm - float
matrix3_column_value = RLPy.RMatrix3( 10, 20, -30,
0, 0, 0,
0, 0, 0 )
print(matrix3_column_value.InfNorm()) # 10+20+abs(-30) = 60
FromAxisAngle( self, rkAxis, fAngle )
Rotation matrix from axis angle。
Parameters
- rkAxis [IN] axis vector - RLPy.RVector3
- fAngle [IN] angle in radians - float
Returns
- Return a new matrix from specified axis angle - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
matrix3_orgin.MakeIdentity()
x_axis_vector = RLPy.RVector3( 1, 0, 0 ) # axis = "X"
y_axis_vector = RLPy.RVector3( 0, 1, 0 ) # axis = "Y"
z_axis_vector = RLPy.RVector3( 0, 0, 1 ) # axis = "Z"
matrix3_orgin.FromAxisAngle( x_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD )
matrix3_orgin.FromAxisAngle( y_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD )
matrix3_orgin.FromAxisAngle( z_axis_vector, 90 * RLPy.RMath.CONST_DEG_TO_RAD )
RotationX( self, fAngle )
Rotation matrix for rotations around x-axis.
Parameters
fAngle [IN] angle in radians - float
Returns
- Return a new matrix of for rotations around x-axis - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
matrix3_orgin.MakeIdentity()
matrix3_orgin.RotationX( 90 * RLPy.RMath.CONST_DEG_TO_RAD )
RotationY( self, fAngle )
Rotate a given 3x3 matrix around the y-axis。
Parameters
- fAngle [IN] angle in radians - float
Returns
- Return a new matrix of for rotations around y-axis - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
matrix3_orgin.MakeIdentity()
matrix3_orgin.RotationY( 90 * RLPy.RMath.CONST_DEG_TO_RAD )
RotationZ( self, fAngle )
Rotation a given 3x3 matrix around the z-axis.
Parameters
- fAngle [IN] angle in radians - float
Returns
- Return a new 3x3 matrix of for rotations around z-axis - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
matrix3_orgin.MakeIdentity()
matrix3_orgin.RotationZ( 90 * RLPy.RMath.CONST_DEG_TO_RAD )
AccuScale( self, rkScale )
Accumulate 3x3 matrix with scale vector.
Parameters
rkScale [IN] Scale vector - RLPy.RVector3
Returns
- Return a new matrix - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
matrix3_orgin.MakeIdentity()
scale_vector = RLPy.RVector3( 2, 2, 2 )
matrix3_orgin.AccuScale(scale_vector)
ToEulerAngle( self, rkScaleself, Order, rx, ry, rz )
Convert matrix to Euler angles.
Parameters
- Order [IN] Euler order - RLPy.Rotation_Order
- rx [OUT] return angle of x-axis in radians - float
- ry [OUT] return angle of y-axis in radians - float
- rz [OUT] return angle of z-axis in radians - float
matrix3_value = RLPy.RMatrix3( -0, -0, 1,
0, -1, -0,
1, 0, -0 )
euler_angle_x = 0
euler_angle_y = 0
euler_angle_z = 0
result = matrix3_value.ToEulerAngle( RLPy.EEulerOrder_XYZ, euler_angle_x, euler_angle_y, euler_angle_z )
print(result[0] * RLPy.RMath.CONST_RAD_TO_DEG) # 180
print(result[1] * RLPy.RMath.CONST_RAD_TO_DEG) # 90
print(result[2] * RLPy.RMath.CONST_RAD_TO_DEG) # 0
FromEulerAngle( self, Order, rx, ry, rz )
Convert Euler angle to a 3x3 matrix.
Parameters
- Order [IN] Euler order - RLPy.Rotation_Order
- rx [IN] return angle of x-axis in radians - float
- ry [IN] return angle of y-axis in radians - float
- rz [IN] return angle of z-axis in radians - float
Returns
- Return a new matrix from specified axis angle - RLPy.RMatrix3
matrix3_orgin = RLPy.RMatrix3()
euler_angle_x = 90 * RLPy.RMath.CONST_DEG_TO_RAD
euler_angle_y = 0
euler_angle_z = 0
matrix3_result = matrix3_orgin.FromEulerAngle( RLPy.EEulerOrder_XYZ, euler_angle_x, euler_angle_y, euler_angle_z)
row0 = matrix3_result[0].GetRow(0)
print(row0[0])
print(row0[1])
print(row0[2])
FromSphereUnitVec( self, rkVec )
Convert Euler angle to matrix.
Parameters
- rkVec [IN] vector - RLPy.RVector3
Returns
- Return a new 3x3 matrix from sphere unit vector - RLPy.RMatrix3
vector = RLPy.RVector3( 0, 1, 0 )
matrix3_result = RLPy.RMatrix3().FromSphereUnitVec( vector )
row0 = matrix3_result.GetRow(0)
print(row0[0])
print(row0[1])
print(row0[2])
IsRightHandCoordinate( self )
Obtain the 3x3 matrix's coordinate system. True stands for right-handed coordinate system while 'False for left-handed.
Returns
- True Right hand coordinate - bool
- False Left hand coordinate - bool
matrix3_value = RLPy.RMatrix3( 1, 0, 0,
0, 1, 0,
0, 0, 1 )
result = matrix3_value.IsRightHandCoordinate()
print(result)