Added 6 test files for Newton-Raphson solver and analytical propagation:
- test_cartesian_to_elements_basic.cpp: Tests state vector ↔ orbital elements conversion
- test_newton_raphson_convergence.cpp: Tests Newton-Raphson solver convergence behavior
- test_analytical_propagation_apsides.cpp: Tests propagation through orbital apsides
- test_analytical_propagation_timesteps.cpp: Tests propagation with various timesteps
- test_extreme_eccentricity.cpp: Tests near-parabolic and hyperbolic orbits
- test_precision_boundaries.cpp: Tests exact boundary value handling
Implemented core orbital mechanics functions:
- solve_kepler_equation(): Newton-Raphson solver with 1e-10 tolerance
- get_initial_trial_value(): Series expansion initial guess
- cartesian_to_orbital_elements(): State vectors to orbital elements conversion
- propagate_orbital_elements(): Analytical propagation using Kepler's equation
Updated test plan document with current progress and remaining tests.
Test status: 66 passed, 14 failed (out of 80 test cases)
- Failing tests are expected: implementation needs debugging
- Config validation issues fixed by adjusting orbital parameters
- Add Mat3 struct documentation
- Update OrbitalElements note: 3D now fully implemented
- Document matrix operations in Physics module section
- Update OrbitTracker with new orbital element fields
- Remove deferred status from Orbital Mechanics documentation
- Molniya position tests now pass with 3D rotation implementation
- Generic inclined orbit test passes with proper argument_of_periapsis
- Only orbital period test still fails (orbit tracker needs 3D fix)
- Add plan document for fixing update_orbit_tracker()
- Remove altitude convenience parameter from body and spacecraft config parsing
- Update test configs to use explicit semi_major_axis instead of altitude
- Remove buggy post-processing loop that added parent radius to all spacecraft
- Result: Semi-major axis now used as-is (correct behavior)
- Test results: Molniya position tests now pass (was failing by 1-11M meters)
- Documentation: Remove altitude references from technical reference
- Planning: Document bug fix decision and implementation details
Changes:
- src/config_loader.cpp: Remove altitude parsing and post-processing
- tests/test_maneuver_planning.toml: Use semi_major_axis = 6.771e6
- tests/test_maneuvers.toml: Use semi_major_axis = 6.771e6
- tests/test_orbit_rendering.toml: Use semi_major_axis = 6.771e6
- docs/technical_reference.md: Remove altitude documentation
- docs/planning/molniya-orbit-test-plan.md: Document bug fix approach
- Create test configuration for Molniya orbits with Earth as root body
- Implement test suite for highly inclined orbits:
* Position verification at multiple true anomalies
* Orbital period verification
* Generic inclined orbit test
* Inclination parameter preservation
- Document critical bug in spacecraft initialization:
* Config loader incorrectly adds parent radius to semi_major_axis
* Affects all spacecraft using semi_major_axis directly
* Causes significant position errors (1-11M meters)
* Molniya tests fail due to this bug, not test code
- Changed scale_radius() from linear to logarithmic: scale * log10(radius)
- Adjusted size_scale from 1e-9 to 0.02 for better visual hierarchy
- Lowered min_radius from 0.5f to 0.01f for fine-grained visibility
- Updated rendering documentation with new scaling values
This handles extreme radius ranges (1.5M to 700M meters) while maintaining
visible size differences between Sun, planets, and moons.
- Correct OrbitalElements struct to match orbital_mechanics.h
- Update CelestialBody and Spacecraft structs to show OrbitalElements field
- Update Config Loader section with orbital elements format
- Add new Config Validator module section with all validation functions
- Update Initialization Sequence to include run_all_config_validations()
- Update config examples to use orbit table instead of state vectors
- Implemented union in OrbitalElements (semi_major_axis | semi_latus_rectum)
- Updated config_loader to validate parabolic vs elliptical/hyperbolic orbits
- Fixed orbital_mechanics.cpp parabolic case to use semi_latus_rectum
- Updated parabolic_comet.toml to use correct orbital parameters
- Updated validation logic for both bodies and spacecraft
- Created docs/parabolic_union_implementation.md with full implementation plan
- Updated docs/unified_orbital_elements_plan.md to mark phases 7-9 complete
Note: Parabolic orbit test velocity tolerance check fails due to test expecting
velocity at 1 AU, but config has comet at perihelion (0.5 AU).
Position and velocity are mathematically correct, energy is ~0.
- Added orbital_mechanics module with orbital_elements_to_cartesian()
- Updated initialize_orbital_objects() to use orbital mechanics
- Added validate_initial_positions() for post-initialization checking
- Fixed test files to use global_position/global_velocity
- Updated config loader to support spacecraft altitude parameter
- Fixed orbital_mechanics.cpp velocity calculation bug (removed duplicate scaling)
- Updated Makefile to include orbital_mechanics.o in test build
- Renamed simulation.h OrbitalMetrics to OrbitalAnalysis to avoid conflict
- Added docs/parabolic_union_implementation.md for parabolic orbit support plan
Note: Test configs still need manual fix for orbit table TOML syntax