Difference between revisions of "Matrix3D(API)"
(→Read and Write file) |
(→API) |
||
Line 47: | Line 47: | ||
extern void matrix3DFileFormat(FILE* fpt); | extern void matrix3DFileFormat(FILE* fpt); | ||
− | === | + | === Affine Matrix === |
+ | ==== Calculate Matrix ==== | ||
+ | Calculate '''Matrix''' from rotation angle.<br> | ||
+ | '''mode''': rotation axis, rot: rotation angle, '''Mode''': initialization flag | ||
extern void matrix3DRotationSet(Matrix3D Matrix, char mode, matrix3DParaTypeReal rot, long Mode); | extern void matrix3DRotationSet(Matrix3D Matrix, char mode, matrix3DParaTypeReal rot, long Mode); | ||
− | + | Rotation by order to specified axis. ('''mode''': initialization flag) | |
extern void matrix3DRotationSetXYZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | extern void matrix3DRotationSetXYZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | ||
extern void matrix3DRotationSetZYX(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | extern void matrix3DRotationSetZYX(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | ||
extern void matrix3DRotationSetZXY(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | extern void matrix3DRotationSetZXY(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | ||
extern void matrix3DRotationSetYXZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | extern void matrix3DRotationSetYXZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | ||
− | + | parallel shift by (rotx, roty, rotz). ('''mode''': initialization flag) | |
− | + | extern void matrix3DTranslationSet(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); | |
+ | Calculation by [[Euler Angle]](Mode, rot1, rot2, rot3). ('''mode''': initialization flag) | ||
extern void matrix3DRotationSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode); | extern void matrix3DRotationSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode); | ||
extern void matrix3DRotationAntiSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode); | extern void matrix3DRotationAntiSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode); | ||
+ | |||
+ | ==== Calculate Rotation Angle ==== | ||
+ | Calculate Rotation Angle '''rot1''', '''rot2''', and '''rot3''' by '''Matrix''' and [[Euler Angle]] mode '''Mode'''. | ||
extern void matrix3DEulerAngleGetFromMatrix3D(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal* rot1, matrix3DParaTypeReal* rot2, matrix3DParaTypeReal* rot3, long mode); | extern void matrix3DEulerAngleGetFromMatrix3D(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal* rot1, matrix3DParaTypeReal* rot2, matrix3DParaTypeReal* rot3, long mode); |
Revision as of 05:43, 7 October 2014
General/Matrix3D is API for 3D Transform Matrix.
Contents
constant
Dimension of row and column
#define MATRIX_3D_WIDTH 4 #define MATRIX_3D_HEIGHT 4
Initialize Mode(0: Not Initialize, 1: Initialize)
#define MATRIX_3D_MODE_NOT_INITIALIZE 0 #define MATRIX_3D_MODE_INITIALIZE 1
#define MATRIX_3D_NEGLECT_VALUE 1e-6
struct
typedef float matrix3DParaTypeReal; typedef matrix3DParaTypeReal Matrix3D[MATRIX_3D_WIDTH][MATRIX_3D_HEIGHT]; typedef char matrix3DEulerAngleMode;
API
Initialization of Matrix
Initialize 4x4 Matrix.
extern void matrix3DInit(Matrix3D Matrix);
Convert
Create 4x4 Matrix from Rotation Matrix (2x2).
extern void matrix3DFromRotationMatrix(Matrix3D dst, Array a);
Inverse Transform
Overwrite as matrix for Inverse Transform .
extern void matrix3DInverse(Matrix3D mat);
Multiply
Multiply of Matrices
extern void matrix3DMultiply(Matrix3D A, Matrix3D B); /* A = A*B */ extern void matrix3DMultiplyInv(Matrix3D A, Matrix3D B); /* B = A*B */
Multiply between Vector and Matrix
extern void matrix3DMultiplyVector(floatVector* v, Matrix3D A); extern void matrix3DMultiplyVectors(floatVector* vs, int n, Matrix3D A);
Read and Write file
Read file fpt, and output to Matrix.
extern void matrix3DFileRead(FILE* fpt, Matrix3D Matrix);
Write Matrix to file fpt.
extern void matrix3DFileWrite(FILE* fpt, Matrix3D Matrix);
Output help to file fpt.
extern void matrix3DFileFormat(FILE* fpt);
Affine Matrix
Calculate Matrix
Calculate Matrix from rotation angle.
mode: rotation axis, rot: rotation angle, Mode: initialization flag
extern void matrix3DRotationSet(Matrix3D Matrix, char mode, matrix3DParaTypeReal rot, long Mode);
Rotation by order to specified axis. (mode: initialization flag)
extern void matrix3DRotationSetXYZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); extern void matrix3DRotationSetZYX(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); extern void matrix3DRotationSetZXY(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode); extern void matrix3DRotationSetYXZ(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode);
parallel shift by (rotx, roty, rotz). (mode: initialization flag)
extern void matrix3DTranslationSet(Matrix3D Matrix, matrix3DParaTypeReal rotx, matrix3DParaTypeReal roty, matrix3DParaTypeReal rotz, long mode);
Calculation by Euler Angle(Mode, rot1, rot2, rot3). (mode: initialization flag)
extern void matrix3DRotationSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode); extern void matrix3DRotationAntiSetFollowingEulerAngle(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal rot1, matrix3DParaTypeReal rot2, matrix3DParaTypeReal rot3, long mode);
Calculate Rotation Angle
Calculate Rotation Angle rot1, rot2, and rot3 by Matrix and Euler Angle mode Mode.
extern void matrix3DEulerAngleGetFromMatrix3D(Matrix3D Matrix, const char Mode[4], matrix3DParaTypeReal* rot1, matrix3DParaTypeReal* rot2, matrix3DParaTypeReal* rot3, long mode);