imu01c
vector.cpp@3:a55edecc96e2, 2016-07-20 (annotated)
- Committer:
- HMFK03LST1
- Date:
- Wed Jul 20 14:13:23 2016 +0000
- Revision:
- 3:a55edecc96e2
- Parent:
- 0:456611adedf8
first
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
HMFK03LST1 | 0:456611adedf8 | 1 | #include <vector.h> |
HMFK03LST1 | 0:456611adedf8 | 2 | #include <math.h> |
HMFK03LST1 | 0:456611adedf8 | 3 | |
HMFK03LST1 | 0:456611adedf8 | 4 | void vector_cross(const vector *a,const vector *b, vector *out) |
HMFK03LST1 | 0:456611adedf8 | 5 | { |
HMFK03LST1 | 0:456611adedf8 | 6 | out->x = a->y*b->z - a->z*b->y; |
HMFK03LST1 | 0:456611adedf8 | 7 | out->y = a->z*b->x - a->x*b->z; |
HMFK03LST1 | 0:456611adedf8 | 8 | out->z = a->x*b->y - a->y*b->x; |
HMFK03LST1 | 0:456611adedf8 | 9 | } |
HMFK03LST1 | 0:456611adedf8 | 10 | |
HMFK03LST1 | 0:456611adedf8 | 11 | float vector_dot(const vector *a,const vector *b) |
HMFK03LST1 | 0:456611adedf8 | 12 | { |
HMFK03LST1 | 0:456611adedf8 | 13 | return a->x*b->x+a->y*b->y+a->z*b->z; |
HMFK03LST1 | 0:456611adedf8 | 14 | } |
HMFK03LST1 | 0:456611adedf8 | 15 | |
HMFK03LST1 | 0:456611adedf8 | 16 | void vector_normalize(vector *a) |
HMFK03LST1 | 0:456611adedf8 | 17 | { |
HMFK03LST1 | 0:456611adedf8 | 18 | float mag = sqrt(vector_dot(a,a)); |
HMFK03LST1 | 0:456611adedf8 | 19 | a->x /= mag; |
HMFK03LST1 | 0:456611adedf8 | 20 | a->y /= mag; |
HMFK03LST1 | 0:456611adedf8 | 21 | a->z /= mag; |
HMFK03LST1 | 0:456611adedf8 | 22 | } |
HMFK03LST1 | 0:456611adedf8 | 23 | |
HMFK03LST1 | 0:456611adedf8 | 24 | void vector_norm_xz(vector*a) |
HMFK03LST1 | 0:456611adedf8 | 25 | { |
HMFK03LST1 | 3:a55edecc96e2 | 26 | float mag = sqrt((a->x*a->x) + (a->z*a->z)); |
HMFK03LST1 | 0:456611adedf8 | 27 | a->x /= mag; |
HMFK03LST1 | 0:456611adedf8 | 28 | a->y = 0; |
HMFK03LST1 | 0:456611adedf8 | 29 | a->z /= mag; |
HMFK03LST1 | 0:456611adedf8 | 30 | |
HMFK03LST1 | 0:456611adedf8 | 31 | } |
HMFK03LST1 | 0:456611adedf8 | 32 | |
HMFK03LST1 | 0:456611adedf8 | 33 | void vector_norm_xy(vector*a) |
HMFK03LST1 | 0:456611adedf8 | 34 | { |
HMFK03LST1 | 0:456611adedf8 | 35 | float mag = sqrt(a->x*a->x + a->y*a->y); |
HMFK03LST1 | 0:456611adedf8 | 36 | a->x /= mag; |
HMFK03LST1 | 0:456611adedf8 | 37 | a->y /= mag; |
HMFK03LST1 | 0:456611adedf8 | 38 | a->z = 0; |
HMFK03LST1 | 0:456611adedf8 | 39 | } |
HMFK03LST1 | 0:456611adedf8 | 40 | |
HMFK03LST1 | 0:456611adedf8 | 41 | void vector_norm_yz(vector*a) |
HMFK03LST1 | 0:456611adedf8 | 42 | { |
HMFK03LST1 | 0:456611adedf8 | 43 | float mag = sqrt(a->z*a->z + a->y*a->y); |
HMFK03LST1 | 0:456611adedf8 | 44 | a->x = 0; |
HMFK03LST1 | 0:456611adedf8 | 45 | a->y /= mag; |
HMFK03LST1 | 0:456611adedf8 | 46 | a->z /= mag; |
HMFK03LST1 | 0:456611adedf8 | 47 | } |