naev 0.12.5
mat3.c
Go to the documentation of this file.
1
2/*
3 * See Licensing and Copyright notice in naev.h
4 */
10#include <stdio.h>
11
12#include "mat3.h"
13
14void mat3_print( const mat3 *m )
15{
16 for ( int i = 0; i < 3; i++ ) {
17 for ( int j = 0; j < 3; j++ )
18 printf( "%7.g ", m->m[j][i] );
19 printf( "\n" );
20 }
21}
22
23void mat3_from_mat4( mat3 *out, const mat4 *in )
24{
25 for ( int i = 0; i < 3; i++ )
26 for ( int j = 0; j < 3; j++ )
27 out->m[i][j] = in->m[i][j];
28}
29
30void mat3_mul_vec( vec3 *out, const mat3 *M, const vec3 *v )
31{
32 for ( int i = 0; i < 3; i++ ) {
33 GLfloat a = 0.;
34 for ( int j = 0; j < 3; j++ )
35 a += M->m[j][i] * v->v[j];
36 out->v[i] = a;
37 }
38}
39
40double mat3_det( const mat3 *m )
41{
42 return m->m[0][0] * ( m->m[1][1] * m->m[2][2] - m->m[2][1] * m->m[1][2] ) -
43 m->m[0][1] * ( m->m[1][0] * m->m[2][2] - m->m[1][2] * m->m[2][0] ) +
44 m->m[0][2] * ( m->m[1][0] * m->m[2][1] - m->m[1][1] * m->m[2][0] );
45}
46
47void mat3_invert( mat3 *m )
48{
49 const double invdet = 1. / mat3_det( m );
50 const mat3 o = *m;
51 m->m[0][0] = ( o.m[1][1] * o.m[2][2] - o.m[2][1] * o.m[1][2] ) * invdet;
52 m->m[0][1] = ( o.m[0][2] * o.m[2][1] - o.m[0][1] * o.m[2][2] ) * invdet;
53 m->m[0][2] = ( o.m[0][1] * o.m[1][2] - o.m[0][2] * o.m[1][1] ) * invdet;
54 m->m[1][0] = ( o.m[1][2] * o.m[2][0] - o.m[1][0] * o.m[2][2] ) * invdet;
55 m->m[1][1] = ( o.m[0][0] * o.m[2][2] - o.m[0][2] * o.m[2][0] ) * invdet;
56 m->m[1][2] = ( o.m[1][0] * o.m[0][2] - o.m[0][0] * o.m[1][2] ) * invdet;
57 m->m[2][0] = ( o.m[1][0] * o.m[2][1] - o.m[2][0] * o.m[1][1] ) * invdet;
58 m->m[2][1] = ( o.m[2][0] * o.m[0][1] - o.m[0][0] * o.m[2][1] ) * invdet;
59 m->m[2][2] = ( o.m[0][0] * o.m[1][1] - o.m[1][0] * o.m[0][1] ) * invdet;
60}
61
62void mat3_transpose( mat3 *m )
63{
64 /* Not optimal due to caching, but simplest. */
65 for ( int i = 0; i < 3 - 1; i++ ) {
66 for ( int j = i + 1; j < 3; j++ ) {
67 double t = m->m[i][j];
68 m->m[i][j] = m->m[j][i];
69 m->m[j][i] = t;
70 }
71 }
72}
Definition mat3.h:11
Definition mat4.h:12
Definition vec3.h:6