You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.4 KiB
2.4 KiB
Matrix Implementation Plan - 3D Orbital Rotations
Objective
Implement 3x3 rotation matrices in the physics module to support 3D orbital element orientation (inclination, RAAN, argument of periapsis).
Background
Currently orbital_elements_to_cartesian() only produces 2D orbits (z=0). To support inclined orbits like Molniya, we need to apply rotation matrices to transform 2D orbital plane coordinates into 3D space.
Rotation Sequence (z-x-z Euler angles)
r_final = R_z(Ω) · R_x(i) · R_z(ω) · r_orbital_plane
v_final = R_z(Ω) · R_x(i) · R_z(ω) · v_orbital_plane
Where:
- ω (omega) = argument of periapsis
- i = inclination
- Ω (Omega) = longitude of ascending node
Implementation
1. Data Structure (physics.h)
struct Mat3 {
double m00, m01, m02; // Row 0
double m10, m11, m12; // Row 1
double m20, m21, m22; // Row 2
};
Format: Row-major 3x3 matrix (different from raylib's column-major 4x4)
2. Functions to Implement (physics.h/cpp)
Core Matrix Operations
mat3_identity()- Returns identity matrixmat3_multiply(Mat3 a, Mat3 b)- Matrix-matrix multiplicationmat3_multiply_vec3(Mat3 m, Vec3 v)- Matrix-vector multiplication
Rotation Matrices
mat3_rotation_x(double angle)- Rotation about X axis (for inclination)mat3_rotation_z(double angle)- Rotation about Z axis (for ω and Ω)
Convenience Function
mat3_rotation_orbital(double omega, double i, double Omega)- Combined rotation
3. Test Plan (test_integration.cpp)
Basic Operations
- Identity matrix multiplication
- Matrix-vector multiplication
- Matrix-matrix multiplication
Edge Cases for Rotations
- Identity (0° rotation)
- 180° rotation (π radians) - coordinate flip
- 360° rotation (2π radians) - should equal identity
- Negative angles (-90° = 270°)
- Very small angles (numerical stability)
- Combined rotations that cancel (+90° then -90°)
Validation Tests
- Orthogonality: R^T · R = I
- Determinant = 1 (proper rotation)
4. Integration (Future Session)
After matrix implementation, modify orbital_elements_to_cartesian() to:
- Generate 2D position/velocity in orbital plane
- Apply combined rotation matrix
- Return 3D coordinates
References
- docs/planning/molniya-orbit-test-plan.md
- src/orbital_mechanics.cpp (orbital_elements_to_cartesian)
- Standard orbital mechanics: Keplerian to Cartesian conversion
Date
Created: 2026-01-28