vibe coding an orbital mechanics simulation to try out claude code
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.
 
 
 
 
 

5.6 KiB

Session Summary: Hierarchical Coordinate Frames (Phases 1-2)

Date: 2026-01-09 Branch: moon_testing Goal: Implement hierarchical coordinate frames to improve moon orbital stability

Overview

Successfully implemented local coordinate frame integration to improve numerical precision for nested orbits. The Earth-Moon orbital stability test is now passing after switching from global to local frame physics integration.

Changes Made

Phase 0: Cleanup

  • Removed multiple root bodies support (barycentric orbit calculations)
  • Deleted configs/example_binary_star.toml
  • Updated documentation to reflect single-root constraint
  • Simplified calculate_initial_velocities() function
  • Net: -154 lines

Phase 1: Foundation (Dual Coordinate Storage)

  • Added local_position and local_velocity fields to CelestialBody struct
  • Implemented initialize_local_coordinates() - converts global→local
  • Implemented compute_global_coordinates() - converts local→global
  • Updated config loader to initialize local coordinates after velocity calculation
  • Updated update_simulation() to maintain coordinate synchronization
  • Result: No behavior change, foundation for local frame integration

Phase 2: Local Frame Integration

  • Modified rk4_step() to integrate using local coordinates
  • Modified evaluate_acceleration() to calculate gravity with parent at origin
  • Updated update_simulation() to compute global FROM local (reversed flow)
  • Parent bodies treated as origin in child's reference frame
  • Result: Earth Moon test NOW PASSING!

Test Results

Before Session:

  • Tests passing: 6/9
  • Moon failures: 3 (Earth Moon, Io, Titan)

After Phase 1:

  • Tests passing: 6/9 (no change, as expected)
  • Foundation in place for local frame integration

After Phase 2:

  • Tests passing: 7/9 (+16.7% improvement)
  • Earth Moon orbital stability: NOW PASSING (was failing with >20% drift)
  • Io (Jupiter): Still failing (orbit not completing in time)
  • Titan (Saturn): Still failing (NaN drift)

Technical Details

Why Local Frames Work Better

Numerical Precision Issue:

  • Moon-Earth distance: ~3.8×10⁸ m
  • Earth-Sun distance: ~1.5×10¹¹ m (400x larger!)

Global Frame Problem:

  • Moon position: [1.5×10¹¹ + 3.8×10⁸, 0, 0]
  • Small orbital changes lost in floating-point precision
  • Planetary perturbations on Earth directly affect Moon integration

Local Frame Solution:

  • Moon position relative to Earth: [3.8×10⁸, 0, 0]
  • Full precision maintained for orbital changes
  • Earth's motion isolated from Moon's integration
  • Parent at origin simplifies gravity calculation

Implementation Architecture

Data Storage (Dual):

struct CelestialBody {
    Vec3 local_position;   // relative to parent
    Vec3 local_velocity;   // relative to parent
    Vec3 position;         // global (computed)
    Vec3 velocity;         // global (computed)
    // ...
};

Update Flow:

  1. Update root bodies (in local frame = global frame)
  2. Compute global coordinates for roots
  3. Update child bodies (in local frame, parent at origin)
  4. Compute global coordinates for children

Key Functions:

  • initialize_local_coordinates() - global→local conversion
  • compute_global_coordinates() - local→global conversion
  • rk4_step() - integrates local coordinates
  • evaluate_acceleration() - gravity with parent at origin

Commits

  1. a64e1ab - Remove multiple root bodies support from simulation.cpp
  2. bc7c646 - Remove binary star config and update documentation
  3. 92be7f8 - Phase 1: Add local coordinate frame storage (no behavior change)
  4. 052efff - Phase 2: Local frame integration (Earth Moon test now passing!)
  5. b1cdbc8 - Update hierarchical_frames_plan.md with Phase 1-2 completion status

Files Modified

Phase 0 (Cleanup):

  • src/simulation.cpp (-89 lines)
  • configs/example_binary_star.toml (deleted, -63 lines)
  • README.md (-3 lines)
  • docs/implementation_plan.md (-6 lines, +1 line)

Phase 1:

  • src/simulation.h (added local coordinate fields)
  • src/simulation.cpp (coordinate conversion functions)
  • src/config_loader.cpp (initialization)
  • docs/hierarchical_frames_plan.md (created, +326 lines)

Phase 2:

  • src/physics.cpp (+15 lines, -7 lines)
  • src/simulation.cpp (+2 lines, -1 line)

Documentation:

  • docs/hierarchical_frames_plan.md (+110 lines with status update)

Net Changes:

  • Cleanup: -158 lines
  • Implementation: +336 lines
  • Total: +178 lines

Future Work

Deferred (Phase 3-5):

  • Phase 3: SOI transition frame transformations (for spacecraft/satellites)
  • Phase 4: Full parent-first update order refinement
  • Phase 5: Validation suite and optimization

Remaining Test Failures:

  • Io and Titan tests may need timestep tuning or stability improvements
  • Not critical - core goal achieved (Earth Moon stable)

Ready For:

  • Patched conics implementation (after Phase 3)
  • Spacecraft/satellite simulation (after Phase 3)
  • Further orbital mechanics improvements

Documentation

Created comprehensive implementation plan in docs/hierarchical_frames_plan.md:

  • Full architectural design
  • Phase-by-phase breakdown
  • Technical rationale for design decisions
  • Status tracking for all phases
  • Notes for future development

Notes

  • Single timestep (60s) maintained throughout simulation
  • No multi-level hierarchy support (max 2 levels: Sun→Planet→Moon)
  • SOI transitions currently work but don't transform coordinates (Phase 3)
  • Major success: Local frame integration dramatically improved moon stability
  • Clean separation of local/global coordinates enables future enhancements