====== Array and Matrix Functions ====== ==== Arrays ==== === 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 Multiply === **Rotation_Multiply**(a,b) 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) Example: Inverse of a 4x4 ROTATION signal or a 3x3 LINK_MODEL_BASED ROTATION 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]]] **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 **;** \\ === Rotation Transpose === **Rotation_Transpose**(a) 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_Euler2Rotation4x4 === This was created for the Shadow segments introduced in 2024. Create a 4x4 Rotation from the Visual3D pose of a segment, with the translation of the origin represented in any coordinate system, and the orientation defined by Euler angles and the Euler sequence. POSE_EULER2ROTATION4X4(R_HEEL,0,0,0,123)