====== Array and Matrix Functions ======
These array and matrix functions can be used anywhere Visual3D allows [[visual3d:documentation:pipeline:expressions:expressions_overview|expressions]] to be used.
===== Arrays =====
Arrays can be thought of as a 1-dimensional ordered list of numerical values.
==== Vector ====
**Vector**(a,b, etc) - creates a vector of the number of components specified
! Create a metric signal with 2 components and one frame
Metric_Explicit
! /RESULT_METRIC_FOLDER=PROCESSED
/RESULT_METRIC_NAME=VEC2
/METRIC_VALUE=2+3
;
! Create a vector containing a constant, a two dimensional metric and a 3 dimensional model based signal.
Evaluate_Expression
/EXPRESSION=vector (1, METRIC::PROCESSED::VEC2, LINK_MODEL_BASED::ORIGINAL::RKNEE_ANGLE)
! /SIGNAL_TYPES=
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
! /RESULT_TYPES=DERIVED
! /RESULT_FOLDERS=PROCESSED
/RESULT_NAME=TEST
! /APPLY_AS_SUFFIX_TO_SIGNAL_NAME=FALSE
;
The resulting signal will have the first three columns (one for the constant, one for the vector of 2 components) buffered to the number of frames of RKNEE_ANGLE by replicating the first frame.
==== List ====
**list(a,b,etc)** - creates a list (column vector) of the number of rows specified.
==== Unit_Vector ====
**unit_vector (a, b, etc)** - creates a unit vector of the number of components specified.
===== Rotation Matrices =====
Rotation matrices are used throughout Visual3D because they can entirely contain the information regarding a segment's [[visual3d:documentation:kinematics_and_kinetics:pose_estimation|pose]].
==== Rotation Multiply ====
**Rotation_Multiply**(a,b) - Multiplies two rotation matrices
Example: Multiply two ROTATION signals
Evaluate_Expression
/EXPRESSION=ROTATION_MULTIPLY(ROTATION_INVERSE(ROTATION::ORIGINAL::PELVIS_SHIFTED_4x4),CURRENT_SIGNAL)
/SIGNAL_TYPES=ROTATION
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
/RESULT_TYPES=ROTATION
! /RESULT_FOLDERS=PROCESSED
/RESULT_NAME=_MULT
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;
==== Rotation Inverse ====
**Rotation_Inverse**(a) - Calculates the inverse of a rotation matrix
Example: Inverse of a 4x4 ROTATION signal or a 3x3 LINK_MODEL_BASED ROTATION
Evaluate_Expression
/EXPRESSION=ROTATION_INVERSE(ROTATION::ORIGINAL::PELVIS_SHIFTED_4x4)
/SIGNAL_TYPES=ROTATION
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
/RESULT_TYPES=ROTATION
! /RESULT_FOLDERS=PROCESSED
/RESULT_NAME=_INV
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;
**Note**: A good description of the inverse of a ROTATION signals can be found [[http://www.info.hiroshima-cu.ac.jp/~miyazaki/knowledge/teche0053.html|here]]
==== Rotation Transpose ====
**Rotation_Transpose**(a) - Creates the transposition of a rotation matrix.
Example: Transpose of a 3x3 LINK_MODEL_BASED ROTATION signal
Evaluate_Expression
/EXPRESSION=ROTATION_TRANSPOSE(ROTATION::ORIGINAL::PELVIS_SHIFTED_4x4)
/SIGNAL_TYPES=ROTATION
! /SIGNAL_FOLDER=ORIGINAL
! /SIGNAL_NAMES=
/RESULT_TYPES=ROTATION
! /RESULT_FOLDERS=PROCESSED
/RESULT_NAME=_T
/APPLY_AS_SUFFIX_TO_SIGNAL_NAME=TRUE
;
==== Pose_4x4 ====
**Pose_4x4(a,0,0,0,123)** - Creates a 4x4 rotation signal based on signal "a" with the translation of the origin (0,0,0) and the orientation defined by Euler angles with the Euler sequence 123.
This function was created in support of the [[visual3d:documentation:modeling:segments:segment_overview#shadow_segments|shadow segments]] feature.
Example: Create a rotation matrix for a shadow segment of the right heel
POSE_4X4(R_HEEL,0,0,0,123)
===== See Also =====
Go back to see other [[visual3d:documentation:pipeline:expressions:expressions_overview#functions|Expression functions]].