PER Firmware
Loading...
Searching...
No Matches
linear_algebra.h
Go to the documentation of this file.
1#ifndef LINEAR_ALGEBRA_H
2#define LINEAR_ALGEBRA_H
3
13#include <math.h>
14
15typedef struct {
16 float x;
17 float y;
18 float z;
19} vector3_t;
20
21typedef struct {
22 float data[3][3];
24
31static inline float vector3_magnitude(const vector3_t vec) {
32 return sqrtf(vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
33}
34
41static inline vector3_t vector3_normalize(const vector3_t vec) {
42 float mag = vector3_magnitude(vec);
43 if (mag < 0.0001f) {
44 return (vector3_t){0, 0, 0};
45 }
46
47 return (vector3_t){
48 vec.x / mag,
49 vec.y / mag,
50 vec.z / mag
51 };
52}
53
61static inline vector3_t matrix_multiply_vector3(const matrix3x3_t *mat, const vector3_t *in) {
62 vector3_t out;
63 out.x = mat->data[0][0] * in->x + mat->data[0][1] * in->y + mat->data[0][2] * in->z;
64 out.y = mat->data[1][0] * in->x + mat->data[1][1] * in->y + mat->data[1][2] * in->z;
65 out.z = mat->data[2][0] * in->x + mat->data[2][1] * in->y + mat->data[2][2] * in->z;
66 return out;
67}
68
77 matrix3x3_t result;
78 for (int i = 0; i < 3; i++) {
79 for (int j = 0; j < 3; j++) {
80 result.data[i][j] = a->data[i][0] * b->data[0][j] +
81 a->data[i][1] * b->data[1][j] +
82 a->data[i][2] * b->data[2][j];
83 }
84 }
85 return result;
86}
87
88#endif // LINEAR_ALGEBRA_H
static vector3_t matrix_multiply_vector3(const matrix3x3_t *mat, const vector3_t *in)
Multiply a 3x3 matrix with a 3D vector.
Definition linear_algebra.h:61
static vector3_t vector3_normalize(const vector3_t vec)
Normalize a 3D vector.
Definition linear_algebra.h:41
static matrix3x3_t matrix_multiply_matrix3x3(const matrix3x3_t *a, const matrix3x3_t *b)
Multiply a 3x3 matrix with another 3x3 matrix.
Definition linear_algebra.h:76
static float vector3_magnitude(const vector3_t vec)
Calculate the magnitude of a 3D vector.
Definition linear_algebra.h:31
Definition linear_algebra.h:21
float data[3][3]
Definition linear_algebra.h:22
Definition linear_algebra.h:15
float z
Definition linear_algebra.h:18
float y
Definition linear_algebra.h:17
float x
Definition linear_algebra.h:16