diff --git a/src/physics.cpp b/src/physics.cpp index 5652485..77d18aa 100644 --- a/src/physics.cpp +++ b/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, diff --git a/src/physics.h b/src/physics.h index 5d19d88..5c8500c 100644 --- a/src/physics.h +++ b/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); diff --git a/src/test_utilities.cpp b/src/test_utilities.cpp index 556c6ee..cac2ce6 100644 --- a/src/test_utilities.cpp +++ b/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);