1#ifndef LINEAR_ALGEBRA_H
2#define LINEAR_ALGEBRA_H
37static inline float vector3_magnitude(
const vector3_t vec) {
38 return sqrtf(vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
48 float mag = vector3_magnitude(vec);
69 out.x = mat->data[0][0] * in->x + mat->data[0][1] * in->y + mat->data[0][2] * in->z;
70 out.y = mat->data[1][0] * in->x + mat->data[1][1] * in->y + mat->data[1][2] * in->z;
71 out.z = mat->data[2][0] * in->x + mat->data[2][1] * in->y + mat->data[2][2] * in->z;
84 for (
int i = 0; i < 3; i++) {
85 for (
int j = 0; j < 3; j++) {
86 result.data[i][j] = a->data[i][0] * b->data[0][j] +
87 a->data[i][1] * b->data[1][j] +
88 a->data[i][2] * b->data[2][j];
102 float cos_roll = cosf(angles.roll);
103 float sin_roll = sinf(angles.roll);
104 float cos_pitch = cosf(angles.pitch);
105 float sin_pitch = sinf(angles.pitch);
106 float cos_yaw = cosf(angles.yaw);
107 float sin_yaw = sinf(angles.yaw);
111 rot.data[0][0] = cos_pitch * cos_yaw;
112 rot.data[0][1] = cos_yaw * sin_pitch * sin_roll - cos_roll * sin_yaw;
113 rot.data[0][2] = sin_roll * sin_yaw + cos_roll * cos_yaw * sin_pitch;
115 rot.data[1][0] = cos_pitch * sin_yaw;
116 rot.data[1][1] = cos_roll * cos_yaw + sin_roll * sin_pitch * sin_yaw;
117 rot.data[1][2] = cos_roll * sin_pitch * sin_yaw - cos_yaw * sin_roll;
119 rot.data[2][0] = -sin_pitch;
120 rot.data[2][1] = cos_pitch * sin_roll;
121 rot.data[2][2] = cos_pitch * cos_roll;
Definition linear_algebra.h:25
Definition linear_algebra.h:21
Definition linear_algebra.h:15