#ifndef _BGC_HG_MATRIX3X3_H_INCLUDED_ #define _BGC_HG_MATRIX3X3_H_INCLUDED_ #include "vector3.h" #include "matrices.h" #include "hg-vector3.h" // =================== Types ==================== // typedef struct { float r1c1, r1c2, r1c3, r1d0; float r2c1, r2c2, r2c3, r2d0; float r3c1, r3c2, r3c3, r3d0; float d0c1, d0c2, d0c3, d0d0; } BGC_FP32_HgMatrix3x3; typedef struct { double r1c1, r1c2, r1c3, r1d0; double r2c1, r2c2, r2c3, r2d0; double r3c1, r3c2, r3c3, r3d0; double d0c1, d0c2, d0c3, d0d0; } BGC_FP64_HgMatrix3x3; // =================== Reset ==================== // inline void bgc_fp32_hg_matrix3x3_reset(BGC_FP32_HgMatrix3x3* homogeneous_matrix) { homogeneous_matrix->r1c1 = 1.0f; homogeneous_matrix->r1c2 = 0.0f; homogeneous_matrix->r1c2 = 0.0f; homogeneous_matrix->r1d0 = 0.0f; homogeneous_matrix->r2c1 = 0.0f; homogeneous_matrix->r2c2 = 1.0f; homogeneous_matrix->r2c2 = 0.0f; homogeneous_matrix->r2d0 = 0.0f; homogeneous_matrix->r3c1 = 0.0f; homogeneous_matrix->r3c2 = 0.0f; homogeneous_matrix->r3c2 = 1.0f; homogeneous_matrix->r3d0 = 0.0f; homogeneous_matrix->d0c1 = 0.0f; homogeneous_matrix->d0c2 = 0.0f; homogeneous_matrix->d0c2 = 0.0f; homogeneous_matrix->d0d0 = 1.0f; } inline void bgc_fp64_hg_matrix3x3_reset(BGC_FP64_HgMatrix3x3* homogeneous_matrix) { homogeneous_matrix->r1c1 = 1.0; homogeneous_matrix->r1c2 = 0.0; homogeneous_matrix->r1c2 = 0.0; homogeneous_matrix->r1d0 = 0.0; homogeneous_matrix->r2c1 = 0.0; homogeneous_matrix->r2c2 = 1.0; homogeneous_matrix->r2c2 = 0.0; homogeneous_matrix->r2d0 = 0.0; homogeneous_matrix->r3c1 = 0.0; homogeneous_matrix->r3c2 = 0.0; homogeneous_matrix->r3c2 = 1.0; homogeneous_matrix->r3d0 = 0.0; homogeneous_matrix->d0c1 = 0.0; homogeneous_matrix->d0c2 = 0.0; homogeneous_matrix->d0c2 = 0.0; homogeneous_matrix->d0d0 = 1.0; } // ==================== Make ==================== // inline void bgc_fp32_hg_matrix3x3_make(BGC_FP32_HgMatrix3x3* homogeneous_matrix, const BGC_FP32_Matrix3x3* linear_matrix, const BGC_FP32_Vector3* shift) { homogeneous_matrix->r1c1 = linear_matrix->r1c1; homogeneous_matrix->r1c2 = linear_matrix->r1c2; homogeneous_matrix->r1c2 = linear_matrix->r1c3; homogeneous_matrix->r1d0 = shift->x1; homogeneous_matrix->r2c1 = linear_matrix->r2c1; homogeneous_matrix->r2c2 = linear_matrix->r2c2; homogeneous_matrix->r2c2 = linear_matrix->r2c3; homogeneous_matrix->r2d0 = shift->x2; homogeneous_matrix->r3c1 = linear_matrix->r3c1; homogeneous_matrix->r3c2 = linear_matrix->r3c2; homogeneous_matrix->r3c2 = linear_matrix->r3c3; homogeneous_matrix->r3d0 = shift->x3; homogeneous_matrix->d0c1 = 0.0f; homogeneous_matrix->d0c2 = 0.0f; homogeneous_matrix->d0c2 = 0.0f; homogeneous_matrix->d0d0 = 1.0f; } inline void bgc_fp64_hg_matrix3x3_make(BGC_FP64_HgMatrix3x3* homogeneous_matrix, const BGC_FP64_Matrix3x3* linear_matrix, const BGC_FP64_Vector3* shift) { homogeneous_matrix->r1c1 = linear_matrix->r1c1; homogeneous_matrix->r1c2 = linear_matrix->r1c2; homogeneous_matrix->r1c2 = linear_matrix->r1c3; homogeneous_matrix->r1d0 = shift->x1; homogeneous_matrix->r2c1 = linear_matrix->r2c1; homogeneous_matrix->r2c2 = linear_matrix->r2c2; homogeneous_matrix->r2c2 = linear_matrix->r2c3; homogeneous_matrix->r2d0 = shift->x2; homogeneous_matrix->r3c1 = linear_matrix->r3c1; homogeneous_matrix->r3c2 = linear_matrix->r3c2; homogeneous_matrix->r3c2 = linear_matrix->r3c3; homogeneous_matrix->r3d0 = shift->x3; homogeneous_matrix->d0c1 = 0.0; homogeneous_matrix->d0c2 = 0.0; homogeneous_matrix->d0c2 = 0.0; homogeneous_matrix->d0d0 = 1.0; } #endif