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.
 
 
 
 
 

4.6 KiB

Session Summary - 2026-01-24

Overview

Implemented Phases 1-3 of unified orbital elements configuration system.

Changes Made

Phase 1: Create Orbital Mechanics Module

  • Created src/orbital_mechanics.h - Defines OrbitalElements struct with Keplerian elements
  • Created src/orbital_mechanics.cpp - Implements orbital_elements_to_cartesian() conversion function
  • Supports all orbit types: circular (e=0), elliptical (0<e<1), parabolic (e=1), hyperbolic (e>1)
  • Planar orbits only (inclination=0), 3D orientation deferred to future work

Phase 2: Update Data Structures

  • Modified CelestialBody struct (simulation.h):

    • Added OrbitalElements orbit field
    • Renamed positionglobal_position
    • Renamed velocityglobal_velocity
    • Reorganized field order for clarity
  • Modified Spacecraft struct (spacecraft.h):

    • Added OrbitalElements orbit field
    • Renamed positionglobal_position
    • Renamed velocityglobal_velocity
  • Renamed OrbitalElementsOrbitalMetrics in simulation.h (output/analysis use case)

    • Updated all references in simulation.cpp, config_loader.cpp, renderer.cpp, ui_renderer.cpp

Phase 3: Update Config Parser

  • Modified parse_toml_body() (config_loader.cpp):

    • Replaced old position field requirement with orbit table parsing
    • Removed old eccentricity and semi_major_axis top-level fields
    • Parses all orbital element fields with defaults
    • Supports altitude convenience field for LEO/GEO orbits
    • Required: semi_major_axis or altitude in orbit table
    • Optional: eccentricity (default 0.0), true_anomaly (default 0.0), 3D orientation elements (default 0.0)
    • Position/velocity initialized to zero (calculated from orbital elements later)
  • Modified parse_toml_spacecraft() (config_loader.cpp):

    • Replaced position + velocity fields with orbit table parsing
    • Uses same orbital element parsing logic as bodies
    • Position/velocity initialized to zero (calculated from orbital elements later)
  • Added validation for orbital elements:

    • semi_major_axis must not be zero
    • eccentricity must be >= 0
    • For elliptical orbits (e < 1): semi_major_axis > 0
    • Validates both bodies and spacecraft
  • Modified load_spacecraft_from_toml():

    • Removed manual position/velocity calculation from parent
    • Now initializes both bodies and spacecraft in initialize_orbital_objects()

Commits

  1. dc1f9f4 - Phase 1: Create orbital mechanics module
  2. 121f1b9 - Phase 2: Update data structures with global_position/global_velocity
  3. ec1d115 - Phase 3: Update config parser to use orbital elements

Net Line Count

  • +172 lines added (orbital_mechanics module, updated structs, config parsing, validation)
  • -93 lines deleted (removed manual velocity calculations, old config format support)

Remaining Issues

  1. Phase 4 incomplete: Need to update initialization to use orbital_elements_to_cartesian() function

    • Current state: add_body_to_simulation() calls old calc_orbital_velocity() (removed)
    • Old initialize_bodies() function still references removed function
    • Need to replace with initialize_orbital_objects() that calls orbital_elements_to_cartesian()
  2. Function name typo: File has orbital_mechanics.h but code uses calc_orbital_velocity (should be orbital not orbi)

  3. Config format: All existing test configs need to be updated to new orbit table format (13 config files)

  4. Renderer references: Need to verify all render_orbit() calls are correct after struct changes

Next Steps (Phase 4)

  1. Remove old calc_orbital_velocity() function from simulation.cpp
  2. Implement initialize_orbital_objects() using orbital_elements_to_cartesian():
    • Bodies: Convert orbital elements to local position/velocity, compute global coordinates
    • Spacecraft: Handle altitude convenience, add parent radius, convert to local/global coordinates
    • Calculate SOI radii for bodies
  3. Update load_system_config() to call initialize_orbital_objects() instead of initialize_bodies()
  4. Update all 13 test configs to new format with orbit tables
  5. Verify renderer displays orbits correctly
  6. Run full test suite to ensure all changes work correctly

Notes

  • All orbital calculations use planar orbits (inclination=0), 3D orientation deferred
  • OrbitalElements struct in separate module to enable clean separation of concerns
  • Config parser now validates orbital elements at load time (better error messages)
  • Altitude convenience simplifies LEO/GEO orbit specification (e.g., altitude=400km instead of semi_major_axis calculation)