Browse Source

add mat3_transpose() and use it in orbit tracker

- Add mat3_transpose() to physics.h/cpp
- Replace inline transpose in update_orbit_tracker() with function call
test-refactor
cinnaboot 2 months ago
parent
commit
a5417e2274
  1. 8
      src/physics.cpp
  2. 1
      src/physics.h
  3. 6
      src/test_utilities.cpp

8
src/physics.cpp

@ -128,6 +128,14 @@ Mat3 mat3_multiply(Mat3 a, Mat3 b) {
};
}
Mat3 mat3_transpose(Mat3 m) {
return {
m.m00, m.m10, m.m20,
m.m01, m.m11, m.m21,
m.m02, m.m12, m.m22
};
}
Vec3 mat3_multiply_vec3(Mat3 m, Vec3 v) {
return {
m.m00 * v.x + m.m01 * v.y + m.m02 * v.z,

1
src/physics.h

@ -29,6 +29,7 @@ double vec3_dot(Vec3 a, Vec3 b);
// Matrix functions
Mat3 mat3_identity();
Mat3 mat3_multiply(Mat3 a, Mat3 b);
Mat3 mat3_transpose(Mat3 m);
Vec3 mat3_multiply_vec3(Mat3 m, Vec3 v);
Mat3 mat3_rotation_x(double angle);
Mat3 mat3_rotation_z(double angle);

6
src/test_utilities.cpp

@ -101,11 +101,7 @@ void update_orbit_tracker(OrbitTracker* tracker, CelestialBody* body, CelestialB
Mat3 rotation = mat3_rotation_orbital(tracker->argument_of_periapsis,
tracker->inclination,
tracker->longitude_of_ascending_node);
// Transpose to get inverse rotation (back to orbital plane)
Mat3 rotation_T = {rotation.m00, rotation.m10, rotation.m20,
rotation.m01, rotation.m11, rotation.m21,
rotation.m02, rotation.m12, rotation.m22};
Vec3 pos_orbital = mat3_multiply_vec3(rotation_T, relative_pos);
Vec3 pos_orbital = mat3_multiply_vec3(mat3_transpose(rotation), relative_pos);
current_angle = atan2(pos_orbital.y, pos_orbital.x);
} else {
current_angle = atan2(relative_pos.y, relative_pos.x);

Loading…
Cancel
Save