Fixed several bugs, imported math library.
[sphoot.git] / src / ecore / math.h
1 #ifndef MATH_H
2 #define MATH_H
3
4 #include <math.h>
5
6 /* Four-dimensional affine vector/point. */
7 typedef struct vector_t vector_t;
8 struct vector_t {
9         float c[4];
10 };
11
12 /* Vector operations. */
13 void set_vector(vector_t *v, float x, float y, float z, float w);
14 void add_vectors(vector_t *v1, vector_t *v2, vector_t *result);
15 void sub_vectors(vector_t *v1, vector_t *v2, vector_t *result);
16 void mul_vector(vector_t *v, float s, vector_t *result);
17 float dot_vectors(vector_t *v1, vector_t *v2);
18 void cross_vectors(vector_t *v1, vector_t *v2, vector_t *result);
19 void project_vector(vector_t *onto, vector_t *v, vector_t *result);
20
21 /* Quaternion operations. */
22 void set_quaternion(vector_t *q, float x, float y, float z, float angle);
23 void set_quaternion_aa(vector_t *q, vector_t *n, float angle);
24
25 void mul_quaternions(vector_t *q1, vector_t *q2, vector_t *result);
26 void conj_quaternion(vector_t *q, vector_t *result);
27
28 void rotate_vector(vector_t *q, vector_t *v, vector_t *result);
29
30 #endif