1 #include <VP_Os/vp_os_assert.h>
3 #include <Maths/matrices.h>
4 #include <Maths/maths.h>
6 const matrix33_t matrix_id3 = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f };
7 const vector31_t vector31_zero = { { { 0.0f, 0.0f, 0.0f } } };
8 const vector31_t vector31_z = { { { 0.0f, 0.0f, 1.0f } } };
10 void mul_mat( matrix33_t* out, matrix33_t *m1, matrix33_t *m2 )
12 /// You can't have output & input pointing to the same location
13 VP_OS_ASSERT( out != m1 );
14 VP_OS_ASSERT( out != m2 );
16 out->m11 = (m1->m11)*(m2->m11) + (m1->m12)*(m2->m21) + (m1->m13)*(m2->m31);
17 out->m12 = (m1->m11)*(m2->m12) + (m1->m12)*(m2->m22) + (m1->m13)*(m2->m32);
18 out->m13 = (m1->m11)*(m2->m13) + (m1->m12)*(m2->m23) + (m1->m13)*(m2->m33);
20 out->m21 = (m1->m21)*(m2->m11) + (m1->m22)*(m2->m21) + (m1->m23)*(m2->m31);
21 out->m22 = (m1->m21)*(m2->m12) + (m1->m22)*(m2->m22) + (m1->m23)*(m2->m32);
22 out->m23 = (m1->m21)*(m2->m13) + (m1->m22)*(m2->m23) + (m1->m23)*(m2->m33);
24 out->m31 = (m1->m31)*(m2->m11) + (m1->m32)*(m2->m21) + (m1->m33)*(m2->m31);
25 out->m32 = (m1->m31)*(m2->m12) + (m1->m32)*(m2->m22) + (m1->m33)*(m2->m32);
26 out->m33 = (m1->m31)*(m2->m13) + (m1->m32)*(m2->m23) + (m1->m33)*(m2->m33);
29 void add_mat( matrix33_t* out, matrix33_t *m1, matrix33_t *m2 )
31 out->m11 = (m1->m11) + (m2->m11);
32 out->m12 = (m1->m12) + (m2->m12);
33 out->m13 = (m1->m13) + (m2->m13);
35 out->m21 = (m1->m21) + (m2->m21);
36 out->m22 = (m1->m22) + (m2->m22);
37 out->m23 = (m1->m23) + (m2->m23);
39 out->m31 = (m1->m31) + (m2->m31);
40 out->m32 = (m1->m32) + (m2->m32);
41 out->m33 = (m1->m33) + (m2->m33);
44 void mulvec_mat( vector31_t* out, matrix33_t *m1, vector31_t *v1 )
46 out->x = (m1->m11) * (v1->x) + (m1->m12) * (v1->y) + (m1->m13) * (v1->z);
47 out->y = (m1->m21) * (v1->x) + (m1->m22) * (v1->y) + (m1->m23) * (v1->z);
48 out->z = (m1->m31) * (v1->x) + (m1->m32) * (v1->y) + (m1->m33) * (v1->z);
51 void transpose_mat( matrix33_t *out, matrix33_t *m1 )
66 void mulconst_mat( matrix33_t *out, matrix33_t *m1, float32_t k )
68 out->m11 = m1->m11 * k;
69 out->m12 = m1->m12 * k;
70 out->m13 = m1->m13 * k;
72 out->m21 = m1->m21 * k;
73 out->m22 = m1->m22 * k;
74 out->m23 = m1->m23 * k;
76 out->m31 = m1->m31 * k;
77 out->m32 = m1->m32 * k;
78 out->m33 = m1->m33 * k;
81 void cross_vec( vector31_t* out, vector31_t *v1, vector31_t *v2 )
83 /// You can't have output & input pointing to the same location
84 VP_OS_ASSERT( out != v1 );
85 VP_OS_ASSERT( out != v2 );
87 out->x = (v1->y) * (v2->z) - (v1->z) * (v2->y);
88 out->y = (v1->z) * (v2->x) - (v1->x) * (v2->z);
89 out->z = (v1->x) * (v2->y) - (v1->y) * (v2->x);
92 void dot_vec( float32_t* out, const vector31_t *v1, const vector31_t *v2 )
94 *out = v1->x * v2->x + v1->y * v2->y + v1->z * v2->z;
97 void add_vec( vector31_t* out, vector31_t *v1, vector31_t *v2 )
99 out->x = (v1->x) + (v2->x);
100 out->y = (v1->y) + (v2->y);
101 out->z = (v1->z) + (v2->z);
104 void mulconst_vec( vector31_t *out, vector31_t *v1, float32_t k )
106 out->x = (v1->x) * k;
107 out->y = (v1->y) * k;
108 out->z = (v1->z) * k;
111 void skew_anti_symetric_vec( matrix33_t *out, vector31_t *v )
126 void vex( vector31_t *out, matrix33_t *m )
133 float32_t norm_vec( vector31_t *v )
135 return sqrtf( (v->x)*(v->x) + (v->y)*(v->y) + (v->z)*(v->z) );
138 bool_t normalize_vec( vector31_t* v )
155 v->x = f_zero( v->x / l );
156 v->y = f_zero( v->y / l );
157 v->z = f_zero( v->z / l );