#include <math.h>#include <gandalf/linalg/3x4matrix.h>#include <gandalf/common/misc_error.h>#include <gandalf/common/endian_io.h>Defines | |
| #define | GAN_MATTYPE Gan_Matrix34 | 
| #define | GAN_MATRIX_TYPE Gan_Matrix | 
| #define | GAN_SQUMATRIX_TYPE Gan_SquMatrix | 
| #define | GAN_VECTOR_TYPE Gan_Vector | 
| #define | GAN_MAT_ELEMENT_TYPE GAN_DOUBLE | 
| #define | GAN_REALTYPE double | 
| #define | GAN_FWRITE_LENDIAN gan_fwrite_lendian_f64 | 
| #define | GAN_FREAD_LENDIAN gan_fread_lendian_f64 | 
| #define | GAN_VECTYPE1 Gan_Vector3 | 
| #define | GAN_VECTYPE2 Gan_Vector4 | 
| #define | GAN_MATTYPEL Gan_Matrix33 | 
| #define | GAN_MATTYPER Gan_Matrix44 | 
| #define | GAN_SQUMATTYPEL Gan_SquMatrix33 | 
| #define | GAN_SQUMATTYPER Gan_SquMatrix44 | 
| #define | GAN_MAT_FPRINT gan_mat34_fprint | 
| #define | GAN_MAT_PRINT gan_mat34_print | 
| #define | GAN_MAT_FSCANF gan_mat34_fscanf | 
| #define | GAN_MAT_FWRITE gan_mat34_fwrite | 
| #define | GAN_MAT_FREAD gan_mat34_fread | 
| #define | GAN_MAT_ZERO_Q gan_mat34_zero_q | 
| #define | GAN_MAT_ZERO_S gan_mat34_zero_s | 
| #define | GAN_MAT_COPY_Q gan_mat34_copy_q | 
| #define | GAN_MAT_COPY_S gan_mat34_copy_s | 
| #define | GAN_MAT_SCALE_Q gan_mat34_scale_q | 
| #define | GAN_MAT_SCALE_I gan_mat34_scale_i | 
| #define | GAN_MAT_SCALE_S gan_mat34_scale_s | 
| #define | GAN_MAT_DIVIDE_Q gan_mat34_divide_q | 
| #define | GAN_MAT_DIVIDE_I gan_mat34_divide_i | 
| #define | GAN_MAT_DIVIDE_S gan_mat34_divide_s | 
| #define | GAN_MAT_NEGATE_Q gan_mat34_negate_q | 
| #define | GAN_MAT_NEGATE_I gan_mat34_negate_i | 
| #define | GAN_MAT_NEGATE_S gan_mat34_negate_s | 
| #define | GAN_MAT_UNIT_Q gan_mat34_unit_q | 
| #define | GAN_MAT_UNIT_I gan_mat34_unit_i | 
| #define | GAN_MAT_UNIT_S gan_mat34_unit_s | 
| #define | GAN_MAT_ADD_Q gan_mat34_add_q | 
| #define | GAN_MAT_ADD_I1 gan_mat34_add_i1 | 
| #define | GAN_MAT_ADD_I2 gan_mat34_add_i2 | 
| #define | GAN_MAT_INCREMENT gan_mat34_increment | 
| #define | GAN_MAT_ADD_S gan_mat34_add_s | 
| #define | GAN_MAT_SUB_Q gan_mat34_sub_q | 
| #define | GAN_MAT_SUB_I1 gan_mat34_sub_i1 | 
| #define | GAN_MAT_SUB_I2 gan_mat34_sub_i2 | 
| #define | GAN_MAT_DECREMENT gan_mat34_decrement | 
| #define | GAN_MAT_SUB_S gan_mat34_sub_s | 
| #define | GAN_VEC_OUTER_Q gan_vec34_outer_q | 
| #define | GAN_VEC_OUTER_S gan_vec34_outer_s | 
| #define | GAN_MAT_MULTV_Q gan_mat34_multv4_q | 
| #define | GAN_MAT_MULTV_S gan_mat34_multv4_s | 
| #define | GAN_MATT_MULTV_Q gan_mat34T_multv3_q | 
| #define | GAN_MATT_MULTV_S gan_mat34T_multv3_s | 
| #define | GAN_MAT_LMULTM_Q gan_mat34_lmultm33_q | 
| #define | GAN_MAT_LMULTM_S gan_mat34_lmultm33_s | 
| #define | GAN_MAT_LMULTMT_Q gan_mat34_lmultm33T_q | 
| #define | GAN_MAT_LMULTMT_S gan_mat34_lmultm33T_s | 
| #define | GAN_MAT_RMULTM_Q gan_mat34_rmultm44_q | 
| #define | GAN_MAT_RMULTM_S gan_mat34_rmultm44_s | 
| #define | GAN_MAT_RMULTMT_Q gan_mat34_rmultm44T_q | 
| #define | GAN_MAT_RMULTMT_S gan_mat34_rmultm44T_s | 
| #define | GAN_MAT_LMULTMT_SYM_Q gan_mat34_lmultm34T_sym_q | 
| #define | GAN_MAT_LMULTMT_SYM_S gan_mat34_lmultm34T_sym_s | 
| #define | GAN_MAT_RMULTMT_SYM_Q gan_mat34_rmultm34T_sym_q | 
| #define | GAN_MAT_RMULTMT_SYM_S gan_mat34_rmultm34T_sym_s | 
| #define | GAN_MAT_SLMULTT_Q gan_mat34_slmultT_q | 
| #define | GAN_MAT_SLMULTT_S gan_mat34_slmultT_s | 
| #define | GAN_MAT_SRMULTT_Q gan_mat34_srmultT_q | 
| #define | GAN_MAT_SRMULTT_S gan_mat34_srmultT_s | 
| #define | GAN_MAT_LMULTS_Q gan_mat34_lmults33_q | 
| #define | GAN_MAT_LMULTS_S gan_mat34_lmults33_s | 
| #define | GAN_MAT_RMULTS_Q gan_mat34_rmults44_q | 
| #define | GAN_MAT_RMULTS_S gan_mat34_rmults44_s | 
| #define | GAN_SYMMATL_LRMULT_Q gan_symmat33_lrmultm34T_q | 
| #define | GAN_SYMMATL_LRMULT_S gan_symmat33_lrmultm34T_s | 
| #define | GAN_SYMMATR_LRMULT_Q gan_symmat44_lrmultm34_q | 
| #define | GAN_SYMMATR_LRMULT_S gan_symmat44_lrmultm34_s | 
| #define | GAN_MAT_LMULTL_Q gan_mat34_lmultl33_q | 
| #define | GAN_MAT_LMULTL_S gan_mat34_lmultl33_s | 
| #define | GAN_MAT_LMULTL_I gan_mat34_lmultl33_i | 
| #define | GAN_MAT_LMULTLI_Q gan_mat34_lmultl33I_q | 
| #define | GAN_MAT_LMULTLI_S gan_mat34_lmultl33I_s | 
| #define | GAN_MAT_LMULTLI_I gan_mat34_lmultl33I_i | 
| #define | GAN_MAT_LMULTLT_Q gan_mat34_lmultl33T_q | 
| #define | GAN_MAT_LMULTLT_S gan_mat34_lmultl33T_s | 
| #define | GAN_MAT_LMULTLT_I gan_mat34_lmultl33T_i | 
| #define | GAN_MAT_LMULTLIT_Q gan_mat34_lmultl33IT_q | 
| #define | GAN_MAT_LMULTLIT_S gan_mat34_lmultl33IT_s | 
| #define | GAN_MAT_LMULTLIT_I gan_mat34_lmultl33IT_i | 
| #define | GAN_MAT_RMULTL_Q gan_mat34_rmultl44_q | 
| #define | GAN_MAT_RMULTL_S gan_mat34_rmultl44_s | 
| #define | GAN_MAT_RMULTL_I gan_mat34_rmultl44_i | 
| #define | GAN_MAT_RMULTLI_Q gan_mat34_rmultl44I_q | 
| #define | GAN_MAT_RMULTLI_S gan_mat34_rmultl44I_s | 
| #define | GAN_MAT_RMULTLI_I gan_mat34_rmultl44I_i | 
| #define | GAN_MAT_RMULTLT_Q gan_mat34_rmultl44T_q | 
| #define | GAN_MAT_RMULTLT_S gan_mat34_rmultl44T_s | 
| #define | GAN_MAT_RMULTLT_I gan_mat34_rmultl44T_i | 
| #define | GAN_MAT_RMULTLIT_Q gan_mat34_rmultl44IT_q | 
| #define | GAN_MAT_RMULTLIT_S gan_mat34_rmultl44IT_s | 
| #define | GAN_MAT_RMULTLIT_I gan_mat34_rmultl44IT_i | 
| #define | GAN_MAT_SUMSQR_Q gan_mat34_sumsqr_q | 
| #define | GAN_MAT_SUMSQR_S gan_mat34_sumsqr_s | 
| #define | GAN_MAT_FNORM_Q gan_mat34_Fnorm_q | 
| #define | GAN_MAT_FNORM_S gan_mat34_Fnorm_s | 
| #define | GAN_MAT_FROM_MAT_Q gan_mat34_from_mat_q | 
| #define | GAN_MAT_FROM_MAT_S gan_mat34_from_mat_s | 
Functions | |
| Gan_Bool | gan_mat34_fprint (FILE *fp, const Gan_Matrix34 *A, const char *prefix, int indent, const char *fmt) | 
| Print 3x4 matrix to file.   | |
| Gan_Bool | gan_mat34_fscanf (FILE *fp, Gan_Matrix34 *A, char *prefix, int prefix_len) | 
| Read 3x4 matrix from file.   | |
| Gan_Matrix34 | gan_mat34_fill_s (double XX, double XY, double XZ, double XW, double YX, double YY, double YZ, double YW, double ZX, double ZY, double ZZ, double ZW) | 
| Fill 3x4 matrix with values.   | |
| Gan_Vector3 | gan_mat34_multv3h_s (const Gan_Matrix34 *A, const Gan_Vector3 *p, double h) | 
| Multiply 3x4 matrix by homogeneous 3-vector.   | |
| Gan_Bool | gan_mat34h_invert_q (const Gan_Matrix34 *A, double a, Gan_Matrix34 *B, double *b) | 
| Compute inverse of completed 4x4 matrix.   | |
| Gan_Matrix34 | gan_mat34h_invert_s (const Gan_Matrix34 *A, double a, double *b) | 
| Compute inverse of completed 4x4 matrix.   | |
| void | gan_mat34_get_rows_s (const Gan_Matrix34 *A, Gan_Vector4 *p, Gan_Vector4 *q, Gan_Vector4 *r) | 
| Extract rows of 3x4 matrix.   | |
| void | gan_mat34_get_cols_s (const Gan_Matrix34 *A, Gan_Vector3 *p, Gan_Vector3 *q, Gan_Vector3 *r, Gan_Vector3 *s) | 
| Extract columns of 3x4 matrix.   | |
| Gan_Matrix33 | gan_mat34_get_m33l_s (const Gan_Matrix34 *A) | 
| Extract left-hand 3x3 part of 3x4 matrix.   | |
| Gan_Vector3 | gan_mat34_get_v3r_s (const Gan_Matrix34 *A) | 
| Extract right-hand column of 3x4 matrix.   | |
| Gan_Matrix34 | gan_mat34_set_parts_s (const Gan_Matrix33 *B, const Gan_Vector3 *p) | 
| Build 3x4 matrix from 3x3 matrix and column 3-vector.   | |
| Gan_Matrix34 | gan_mat34_set_cols_s (const Gan_Vector3 *p, const Gan_Vector3 *q, const Gan_Vector3 *r, const Gan_Vector3 *s) | 
| Build 3x4 matrix from 3-vector columns.   | |
| Gan_Matrix34 | gan_mat34_set_rows_s (const Gan_Vector4 *p, const Gan_Vector4 *q, const Gan_Vector4 *r) | 
| Build 3x4 matrix from 4-vector rows.   | |
| Gan_Matrix34 * | gan_mat34_from_mat_q (const Gan_Matrix *A, Gan_Matrix34 *B) | 
| Convert generic rectangular matrix to 3x4 matrix structure.   | |
| Gan_Bool | gan_mat34_print (const Gan_Matrix34 *A, const char *prefix, int indent, const char *fmt) | 
| Print fixed size matrix to standard output.   | |
| Gan_Bool | gan_mat34_fwrite (FILE *fp, const Gan_Matrix34 *A, gan_uint32 magic_number) | 
| Write fixed size matrix to file stream.   | |
| Gan_Bool | gan_mat34_fread (FILE *fp, Gan_Matrix34 *A, gan_uint32 *magic_number) | 
| Read fixed size matrix from file stream.   | |
| Gan_Matrix34 | gan_mat34_zero_s (void) | 
| Set fixed size matrix to zero.   | |
| Gan_Matrix34 | gan_mat34_copy_s (const Gan_Matrix34 *A) | 
| Copy fixed size matrix.   | |
| Gan_Matrix34 | gan_mat34_scale_s (const Gan_Matrix34 *A, double a) | 
| Scale fixed size matrix.   | |
| Gan_Matrix34 | gan_mat34_divide_s (const Gan_Matrix34 *A, double a) | 
| Divide fixed size matrix by scalar.   | |
| Gan_Matrix34 | gan_mat34_negate_s (const Gan_Matrix34 *A) | 
| Negate fixed size matrix.   | |
| Gan_Matrix34 * | gan_mat34_unit_q (Gan_Matrix34 *A, Gan_Matrix34 *B) | 
| Scale matrix to unit norm.   | |
| Gan_Matrix34 | gan_mat34_unit_s (const Gan_Matrix34 *A) | 
| Scale matrix to unit norm.   | |
| Gan_Matrix34 | gan_mat34_add_s (const Gan_Matrix34 *A, const Gan_Matrix34 *B) | 
| Add two fixed size matrices.   | |
| Gan_Matrix34 | gan_mat34_sub_s (const Gan_Matrix34 *A, const Gan_Matrix34 *B) | 
| Subtract two fixed size matrices.   | |
| Gan_Matrix34 | gan_vec34_outer_s (const Gan_Vector3 *p, const Gan_Vector4 *q) | 
| Compute the outer product of two fixed size vectors.   | |
| Gan_Vector3 | gan_mat34_multv4_s (const Gan_Matrix34 *A, const Gan_Vector4 *p) | 
| Matrix/vector product.   | |
| Gan_Vector4 | gan_mat34T_multv3_s (const Gan_Matrix34 *A, const Gan_Vector3 *p) | 
| Matrix/vector product with the matrix transposed.   | |
| Gan_Matrix34 | gan_mat34_lmultm33_s (const Gan_Matrix34 *A, const Gan_Matrix33 *B) | 
| Left-multiply a matrix by another matrix.   | |
| Gan_Matrix34 | gan_mat34_lmultm33T_s (const Gan_Matrix34 *A, const Gan_Matrix33 *B) | 
| Left-multiply a matrix by the transpose of another matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultm44_s (const Gan_Matrix34 *A, const Gan_Matrix44 *B) | 
| Right-multiply a matrix by another matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultm44T_s (const Gan_Matrix34 *A, const Gan_Matrix44 *B) | 
| Right-multiply a matrix by the transpose of another matrix.   | |
| Gan_SquMatrix44 | gan_mat34_lmultm34T_sym_s (const Gan_Matrix34 *A, const Gan_Matrix34 *B) | 
| Matrix product producing a symmetric matrix.   | |
| Gan_SquMatrix33 | gan_mat34_rmultm34T_sym_s (const Gan_Matrix34 *A, const Gan_Matrix34 *B) | 
| Matrix product producing a symmetric matrix.   | |
| Gan_SquMatrix44 | gan_mat34_slmultT_s (const Gan_Matrix34 *A) | 
| Left-multiply a matrix by its own transpose, producing a symmetric matrix.   | |
| Gan_SquMatrix33 | gan_mat34_srmultT_s (const Gan_Matrix34 *A) | 
| Right-multiply a matrix by its own transpose, producing a symmetric matrix.   | |
| Gan_Matrix34 | gan_mat34_lmults33_s (const Gan_Matrix34 *A, const Gan_SquMatrix33 *B) | 
| Left-multiply a matrix by a symmetric matrix.   | |
| Gan_Matrix34 | gan_mat34_rmults44_s (const Gan_Matrix34 *A, const Gan_SquMatrix44 *B) | 
| Right-multiply a matrix by a symmetric matrix.   | |
| Gan_SquMatrix44 | gan_symmat33_lrmultm34T_s (const Gan_SquMatrix33 *A, const Gan_Matrix34 *B, Gan_Matrix34 *C) | 
| Matrix triple product involving symmetric matrices.   | |
| Gan_SquMatrix33 | gan_symmat44_lrmultm34_s (const Gan_SquMatrix44 *A, const Gan_Matrix34 *B, Gan_Matrix34 *C) | 
| Matrix triple product involving symmetric matrices.   | |
| Gan_Matrix34 | gan_mat34_lmultl33_s (const Gan_Matrix34 *A, const Gan_SquMatrix33 *B) | 
| Left-multiply a matrix by a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_lmultl33I_s (const Gan_Matrix34 *A, const Gan_SquMatrix33 *B) | 
| Left-multiply a matrix by the inverse of a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_lmultl33T_s (const Gan_Matrix34 *A, const Gan_SquMatrix33 *B) | 
| Left-multiply a matrix by the transpose of a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_lmultl33IT_s (const Gan_Matrix34 *A, const Gan_SquMatrix33 *B) | 
| Left-multiply a matrix by the inverse transpose of a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultl44_s (const Gan_Matrix34 *A, const Gan_SquMatrix44 *B) | 
| Right-multiply a matrix by a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultl44I_s (const Gan_Matrix34 *A, const Gan_SquMatrix44 *B) | 
| Right-multiply a matrix by the inverse of a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultl44T_s (const Gan_Matrix34 *A, const Gan_SquMatrix44 *B) | 
| Right-multiply a matrix by the transpose of a lower-triangular matrix.   | |
| Gan_Matrix34 | gan_mat34_rmultl44IT_s (const Gan_Matrix34 *A, const Gan_SquMatrix44 *B) | 
| Right-multiply a matrix by the inverse transpose of a lower-triangular matrix.   | |
| double | gan_mat34_sumsqr_s (const Gan_Matrix34 *A) | 
| Returns sum of squares of matrix elements.   | |
| double | gan_mat34_Fnorm_s (const Gan_Matrix34 *A) | 
| Frobenius norm of matrix.   | |
| Gan_Matrix34 | gan_mat34_from_mat_s (const Gan_Matrix *A) | 
| Convert generic rectangular matrix to fixed size matrix structure.   | |
Part of: Gandalf Library
 1.3.9.1