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.4 KiB

Config File Improvements & Main.cpp Refactoring

Date: 2026-01-03

Overview

This session focused on refactoring main.cpp into smaller functions and adding support for eccentric orbits through an extended configuration file format.

Changes Made

1. Main.cpp Refactoring

Broke down 215-line main() function into focused, reusable functions:

New Functions:

  • parse_command_line_args() - Parse CLI args into ProgramArgs struct
  • print_startup_info() - Display simulation configuration
  • run_headless_simulation() - Terminal-based simulation with state capture
  • run_gui_simulation() - 3D visualization mode

Result: main() now only ~25 lines (setup and dispatch)

Additional Improvements:

  • Added initial state capture in headless mode
  • Initial state now printed both at start AND end for comparison
  • Cleaner separation of concerns

2. Eccentric Orbit Support

Extended config format from 10 to 12 fields:

Old Format (10 fields):

name mass radius x y z parent_index r g b

New Format (12 fields):

name mass radius x y z parent_index r g b eccentricity semi_major_axis

Implementation:

  • Uses vis-viva equation: v = sqrt(G*M*(2/r - 1/a))
  • Circular orbits: e=0, a=orbital_radius
  • Elliptical orbits: e>0, a=semi_major_axis
  • Unified code path for both orbit types

Example Configurations:

# Circular orbit
Earth 5.972e24 6.371e6 1.496e11 0 0 0 0.0 0.5 1.0 0 1.496e11

# Eccentric orbit (e=0.7)
Comet 1e14 5e3 1.122e11 0 0 0 0.5 0.8 1.0 0.7 3.74e11

3. Code Simplification

  • Removed dual format parsing (now single unified format)
  • Shortened function name: calculate_initial_velocities_with_params()calculate_velocities()
  • Removed OrbitParams.has_params field (always have params now)
  • Cleaner velocity calculation logic

4. Testing

Created test_simple.txt with eccentric comet:

  • Eccentricity: 0.7
  • Semi-major axis: 2.5 AU
  • Perihelion: 0.75 AU
  • Aphelion: 4.25 AU

Test Results:

  • ✓ Initial velocity: 44.849 km/s (matches theoretical)
  • ✓ Position varies from 0.75 AU to ~3.8 AU over simulation
  • ✓ Velocity varies from 44.8 km/s (perihelion) to 10.6 km/s (aphelion)
  • ✓ Energy conservation maintained

5. Documentation Updates

README.md:

  • Updated config format section with 12-field format
  • Added examples for both circular and eccentric orbits
  • Added "Eccentric orbit support" to features list
  • Updated field descriptions

docs/config_assumptions.md:

  • Documented fixed issues (eccentric orbits, main.cpp refactoring)
  • Updated format assumptions (10 → 12 fields)
  • Added prioritized TODO list
  • Added session notes with detailed change log

Git Commits

  1. e5da7aa - Refactor main.cpp into focused functions

    • Extracted argument parsing, headless sim, GUI sim
    • Added initial state capture for comparison
  2. 17f11bb - Add eccentric orbit support with unified config format

    • Extended format to 12 fields
    • Implemented vis-viva equation
    • Added example comet configuration
  3. 8b9a06e - Update documentation for eccentric orbit support

    • Updated README with new format
    • Updated config_assumptions.md
  4. 61ac1c5 - Add session notes and TODOs to config documentation

    • Documented all session changes
    • Created prioritized action items

Files Modified

Source Code:

  • src/main.cpp (refactored into functions)
  • src/config_loader.cpp (added orbit parameters support)

Configuration:

  • configs/test_simple.txt (updated to 12-field format + comet)

Documentation:

  • README.md (new format examples)
  • docs/config_assumptions.md (status updates + TODOs)

Known Issues & TODOs

HIGH PRIORITY:

  • Update configs/solar_system.txt to new 12-field format
  • Update configs/example_binary_star.txt to new 12-field format
  • Fix Moon position in solar_system.txt
    • Current: (1.500e11, 0, 0) - 4 million km from Earth
    • Should: (~1.496e11 + 3.844e8, 0, 0) - 384,400 km from Earth
  • Fix Jupiter's moons positions (same issue as Moon)

MEDIUM PRIORITY:

  • Add config file validation
  • Document coordinate system clearly (absolute vs relative)

LOW PRIORITY:

  • Consider relative coordinate option for child bodies
  • Add 3D orbit support (currently XY plane only)

Technical Notes

Vis-Viva Equation

v = sqrt(G*M*(2/r - 1/a))

Where:

  • v = orbital velocity at current position
  • G = gravitational constant
  • M = parent body mass
  • r = current distance from parent
  • a = semi-major axis of orbit

For circular orbits (e=0):

  • r = a (constant)
  • Equation simplifies to: v = sqrt(G*M/r)

For eccentric orbits (e>0):

  • At perihelion (r = a(1-e)): velocity is maximum
  • At aphelion (r = a(1+e)): velocity is minimum
  • Demonstrates Kepler's 2nd law (equal areas in equal times)

Orbital Period:

T = 2π * sqrt(a³/GM)

Example for comet (a=2.5 AU): T ≈ 1444 days

Testing Commands

Build:

make

Run with default config (currently test_simple.txt):

./orbit_sim

Run headless for 1000 days:

./orbit_sim --days 1000

Run with specific config:

./orbit_sim configs/test_simple.txt

Run headless with readable units:

./orbit_sim --headless --readable --days 365

Next Session Recommendations

  1. Update remaining config files to 12-field format
  2. Fix moon positions with correct physics
  3. Test updated configurations
  4. Consider adding config validation warnings
  5. Possibly add argument of periapsis parameter for 3D orbit orientation