1 #ifndef MATRIX_INLINES_H 2 #define MATRIX_INLINES_H 11 inline void matrix4_zero(matrix4_t x)
20 inline void matrix4_identity(matrix4_t x)
23 x[0][0] = x[1][1] = x[2][2] = x[3][3] = One;
27 inline void matrix4_from_basis(matrix4_t x,
const vec4_t xbasis,
const vec4_t ybasis,
const vec4_t zbasis,
const vec4_t trans)
29 vec4_equal(x[0], xbasis);
30 vec4_equal(x[1], ybasis);
31 vec4_equal(x[2], zbasis);
32 vec4_equal(x[3], trans);
36 inline void matrix4_to_basis(
const matrix4_t x, vec4_t xbasis, vec4_t ybasis, vec4_t zbasis, vec4_t trans)
38 vec4_equal(xbasis, x[0]);
39 vec4_equal(ybasis, x[1]);
40 vec4_equal(zbasis, x[2]);
41 vec4_equal(trans, x[3]);
45 inline void matrix4_equal(matrix4_t x,
const matrix4_t a)
54 inline void matrix4_add(matrix4_t x,
const matrix4_t a,
const matrix4_t b)
59 x[i][j] = a[i][j] + b[i][j];
63 inline void matrix4_sub(matrix4_t x,
const matrix4_t a,
const matrix4_t b)
68 x[i][j] = a[i][j] - b[i][j];
72 inline void matrix4_multiply(matrix4_t x,
const matrix4_t a,
const matrix4_t b)
82 temp[i][j] += b[i][k] * a[k][j];
84 matrix4_equal(x, temp);
88 inline void matrix4_transpose(matrix4_t x,
const matrix4_t a)
97 inline void matrix4_vec3_multiply(vec3_t x,
const matrix4_t a,
const vec3_t v)
99 x[0] = a[0][0]*v[0] + a[1][0]*v[1] + a[2][0]*v[2] + a[3][0];
100 x[1] = a[0][1]*v[0] + a[1][1]*v[1] + a[2][1]*v[2] + a[3][1];
101 x[2] = a[0][2]*v[0] + a[1][2]*v[1] + a[2][2]*v[2] + a[3][2];
105 inline void matrix4_normal_multiply(vec3_t x,
const matrix4_t a,
const vec3_t v)
107 x[0] = a[0][0]*v[0] + a[1][0]*v[1] + a[2][0]*v[2];
108 x[1] = a[0][1]*v[0] + a[1][1]*v[1] + a[2][1]*v[2];
109 x[2] = a[0][2]*v[0] + a[1][2]*v[1] + a[2][2]*v[2];
113 inline void matrix4_vec3_multiply_transpose(vec3_t x,
const matrix4_t a,
const vec3_t v)
115 x[0] = a[0][0]*v[0] + a[0][1]*v[1] + a[0][2]*v[2];
116 x[1] = a[1][0]*v[0] + a[1][1]*v[1] + a[1][2]*v[2];
117 x[2] = a[2][0]*v[0] + a[2][1]*v[1] + a[2][2]*v[2];
120 #define matrix4_normal_multiply_transpose matrix4_vec3_multiply_transpose 123 inline void matrix4_vec4_multiply(vec4_t x,
const matrix4_t a,
const vec4_t v)
125 x[0] = a[0][0]*v[0] + a[1][0]*v[1] + a[2][0]*v[2] + a[3][0]*v[3];
126 x[1] = a[0][1]*v[0] + a[1][1]*v[1] + a[2][1]*v[2] + a[3][1]*v[3];
127 x[2] = a[0][2]*v[0] + a[1][2]*v[1] + a[2][2]*v[2] + a[3][2]*v[3];
128 x[2] = a[0][3]*v[0] + a[1][3]*v[1] + a[2][3]*v[2] + a[3][3]*v[3];
133 inline void matrix4_scale3(matrix4_t x, Real scale)
143 inline void matrix4_scale3(matrix4_t x,
const vec3_t v_scale)
149 x[i][j] *= v_scale[i];
152 inline Real matrix3_determinant(
const matrix4_t a)
154 return a[0][0] * (a[1][1]*a[2][2] - a[2][1]*a[1][2])
155 + a[1][0] * (a[2][1]*a[0][2] - a[2][2]*a[0][1])
156 + a[2][0] * (a[0][1]*a[1][2] - a[0][2]*a[1][1]);
160 inline void matrix4_cross_product(matrix4_t x,
const vec3_t v)
173 inline void matrix4_uncross(vec3_t x,
const matrix4_t a)
181 void matrix4_invert( matrix4_t x,
const matrix4_t a );
184 void matrix4_rotation(matrix4_t x,
const vec3_t r);
185 void matrix4_rotation_axis(vec3_t r,
const matrix4_t R);
187 inline void matrix4_rotate_x(matrix4_t x, Real fRads)
190 Real cx = Cos(fRads);
191 Real sx = Sin(fRads);
198 inline void matrix4_rotate_y(matrix4_t x, Real fRads)
201 Real cy = Cos(fRads);
202 Real sy = Sin(fRads);
209 inline void matrix4_rotate_z(matrix4_t x, Real fRads)
212 Real cz = Cos(fRads);
213 Real sz = Sin(fRads);
223 inline void matrix4_projection(matrix4_t x,
const vec3_t v)
227 vec3_make(temp, One,Zero,Zero);
228 vec3_project(x[0], temp, v);
229 vec3_make(temp, Zero,One,Zero);
230 vec3_project(x[1], temp, v);
231 vec3_make(temp, Zero,Zero,One);
232 vec3_project(x[2], temp, v);
237 inline void matrix4_plane_projection(matrix4_t x,
const vec4_t p, vec3_t v)
239 Real c = - One / vec3_dot(v,p);
240 for(
int i=0; i<4; i++)
241 for(
int j=0; j<4; j++)
246 x[i][j] = v[i]*p[j] * c;
256 inline void matrix4_rigid_body_inverse(matrix4_t x,
const matrix4_t a)
258 matrix4_transpose(x, a);
259 x[0][3] = x[1][3] = x[2][3] = Zero;
261 matrix4_normal_multiply(r, x, a[3]);
262 vec3_negate(x[3], r);
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:12