Add dual coordinate storage to CelestialBody for hierarchical frames.
Both local (relative to parent) and global (absolute) coordinates maintained.
- Added local_position and local_velocity fields to CelestialBody
- Added initialize_local_coordinates() to convert global→local
- Added compute_global_coordinates() to convert local→global
- Updated config_loader to initialize local coords after velocity calc
- Updated update_simulation() to sync local coords after integration
- Phase 1 complete: foundation for local frame integration
Tests: Same 3 moon failures as before (no regression)
Implements hierarchical_frames_plan.md Phase 1
- Removed add_body() function (unused across codebase)
- Renamed compute_initial_velocities() to calculate_initial_velocities()
- Removed redundant wrapper function
Removed 26 lines of dead code
- Break up calculate_initial_velocities() (114 lines) into 8 focused functions
- Add vec3_cross() utility to physics.cpp for reusable cross product calculation
- Make helper functions static in simulation.cpp (internal implementation detail)
- Remove unnecessary helper declarations from simulation.h (cleaner public API)
New helper functions:
- compute_perpendicular_orbital_velocity() - root body orbits
- compute_orbital_velocity_from_vis_viva() - child body orbits
- compute_system_barycenter() - barycenter calculation
- compute_total_root_mass() - total mass calculation
- set_root_bodies_velocity() - set all root velocities
- set_child_bodies_velocity() - set all child velocities
- print_system_info_if_multiple_roots() - debug output
Benefits:
- Code reuse: vec3_cross() used 2x (eliminates duplicate perpendicular logic)
- Testability: smaller functions easier to test individually
- Readability: descriptive names for each body type scenario
- Maintainability: main function reduced from 114 to 10 lines
Claude
- Renamed src/bodies.h to src/simulation.h
- Renamed src/bodies.cpp to src/simulation.cpp
- Updated all include references in src/ and tests/
- Updated Makefile to reference simulation.cpp
- Updated documentation references
Claude
- Move OrbitalElements struct to src/bodies.h
- Move calculate_orbital_elements() to src/bodies.cpp
- Add test_comet_orbit.cpp with parent index change tracking
- Update Makefile to include new test file
🤖 Refactored orbital mechanics code for better reusability
Orbital mechanics simulation with 2-body physics and SOI transitions.
Core Features:
- 2-body gravitational physics with sphere of influence transitions
- Real-time 3D visualization using raylib
- Configurable star systems via text files
- Interactive controls (camera, pause, speed)
Technical Implementation:
- C-style C++ (structs and functions, no classes)
- Modular architecture (physics, bodies, config loader, renderer)
- Euler integration for orbital mechanics
- SOI detection using Hill sphere approximation
Configuration System:
- Solar system with realistic data (Sun, 8 planets, 5 major moons)
- Binary star system example
- Easy to create custom systems via simple text format
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>