- Fixed velocity calculation in compute_orbital_velocity_from_vis_viva to use semi_major_axis for circular orbits instead of computing distance from global coordinates
- Fixed Titan's initial position in solar_system.toml to match semi_major_axis (1.43522e12 instead of 1.435e12)
- Moon orbit tests now pass (238,759 assertions)
Add core orbital mechanics calculations and spacecraft spawning infrastructure
for interplanetary trajectory planning. Enables calculation of realistic
transfer orbits with proper departure window timing.
New Module (mission_planning.h/cpp):
- calculate_hohmann_transfer(): Returns transfer orbit parameters
- calculate_angular_position(): Computes body angle in XY plane
- calculate_required_phase_angle(): Calculates optimal launch phase
- check_launch_window(): Tests if current phase allows optimal launch
- wait_for_launch_window(): Fast-forwards to launch window
- spawn_spacecraft_on_transfer(): Creates spacecraft on transfer trajectory
Simulation Extensions (simulation.cpp/h):
- add_body_to_simulation(): Dynamic body creation at runtime
- Properly handles local/global coordinate initialization
- SOI radius calculation for dynamically added bodies
Test Suite:
- test_mission_planning.cpp: Core calculations validated
- test_hohmann_transfer.cpp: Spacecraft spawning verified
- earth_mars_simple.toml: Test configuration for transfers
Validations:
- Transfer parameters match NASA references (±5%)
- Earth→Mars transfer: 259 days, 44.3° phase, 2.94 km/s Δv
- Spacecraft spawns with correct velocity and position
- Launch window detection works (waits ~94 days for optimal window)
Status: Phases 1-3 complete, Phase 4 debugging in progress
(trajectory divergence after first update_simulation() call)
Core Changes:
- Remove new_parent != -1 check in update_simulation()
- Add special handling for root body transitions (parent_index = -1)
- Bodies can now transition to/from Sun (root)
- Proper coordinate transformation for body->root and root->body transitions
Implementation:
- Old parent = -1: local = global (no transformation needed)
- New parent = -1: global = local (no transformation needed)
- find_dominant_body() already handles -1 returns correctly
Testing:
- Add test_root_body_transitions.cpp with 2 test cases
- Test 1: Earth to Sun transition (validates Sun involvement)
- Test 2: Round-trip Earth -> Sun -> Mars -> Sun (multi-leg)
- Create manual_root_transition.toml config
- All 6 assertions passing
Results:
✅ Satellites can transition to/from Sun
✅ Multi-leg transitions work (Earth→Sun→Mars→Sun)
✅ Root body transitions validated
✅ Tests pass for patched conics scenarios
Files Modified:
- src/simulation.cpp (root body transition handling)
Files Created:
- tests/test_root_body_transitions.cpp (2 test cases)
- tests/configs/manual_root_transition.toml
- tests/configs/simple_root_transition.toml
- tests/configs/interplanetary_transfer.toml
Phase 1 Status: COMPLETE ✅
Next: Phase 2 - Adaptive Hysteresis
- Create soi_transition.toml with Sun + Mars + SmallBody (3 bodies)
- Add test_soi_transition.cpp with 2 test cases:
* SOI transition from Sun to Mars (validates one-way transition)
* SOI radii calculation verification
- Use comet parameters (e=0.7, a=3.74e11) for Mars encounter
- Document hysteresis makes Mars -> Sun exit impossible
- Simpler than original 7-body test_comet_orbit.cpp
- All 3 SOI tests pass (12 assertions total)
Claude
- Add hyperbolic_comet.toml with e=1.5, a=-1.496e11
- Add 3 test cases:
* Energy and escape trajectory (300 days)
* Initial conditions verification
* Asymptotic velocity validation (1000 days)
- Tests validate: v > v_escape, E > 0, e > 1.0, a < 0
- Asymptotic test uses 30% tolerance at 18+ AU distance
- Existing hyperbolic rendering unchanged
Claude
- Update velocity calculation to handle e=1.0 (parabolic orbits)
using escape velocity formula v² = 2GM/r instead of vis-viva
- Add parabolic comet test configuration
- Add test cases for parabolic orbit energy and escape trajectory
Claude
- Created tests/test_moon_orbits.cpp with 4 test cases:
* Moon orbital stability around Earth
* Galilean moons orbital stability around Jupiter
* Titan orbital stability around Saturn
* Combined solar system parent stability
- Enhanced test_utilities.h/cpp:
* Added min_time_days field to OrbitTracker
* Added create_orbit_tracker_with_min_time() for short-period orbits
- Fixed parent indexes in tests/configs/solar_system.toml:
* Moon: parent 3 (Mars) → 2 (Earth)
* Io/Europa/Ganymede/Callisto: parent 5 (Saturn) → 4 (Jupiter)
* Titan: parent 6 (Uranus) → 5 (Saturn)
- Updated semi_major_axis for moons to actual orbital distances
Tests reveal need for hierarchical orbit physics implementation.
Net change: +368 lines
- Add tomlc17 library as git submodule
- Update Makefile to build tomlc17.c with C compiler
- Replace config_loader.cpp with TOML-based implementation
- Add helper functions for parsing TOML tables (position, color)
- Convert all 5 config files from .txt to .toml format:
* configs/solar_system.toml - full solar system with planets and moons
* configs/example_binary_star.toml - binary star system
* configs/test_simple.toml - various orbit types for testing
* tests/configs/earth_circular.toml - Earth orbit test
* tests/configs/mars_circular.toml - Mars orbit test
- Update all test files to reference .toml extensions
- Remove old .txt config files (maintain compatibility)
- Support both INT64 and FP64 TOML values (tomlc17 type flexibility)
- All automated tests pass with new TOML format
Claude