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.
 
 
 
 
 

2.6 KiB

Find Dominant Body Bug: Mutual SOI Issue

Overview

This documents the remaining issue with find_dominant_body() when two similar-mass bodies are positioned within each other's sphere of influence (SOI).

Date: January 20, 2026 Status: Failing Test (Test 4 from test_plan_invalid_parent_assignment.md) Related: docs/test_plan_invalid_parent_assignment.md


Test Case 4: Mutual SOI - Similar Mass Planets

Purpose: Edge case: two Earth-like planets positioned within each other's SOI

Actual Result: STILL FAILS (separate issue, not fixed by spacecraft validation)

Config: tests/configs/mutual_soi_close.toml

Setup:

  • PlanetA: mass = 5.972e24 kg, position = {1.496e11, 0, 0}
  • PlanetB: mass = 5.972e24 kg, position = {1.501e11, 0, 0}
  • Separation: 5e8 meters (500 million km)
  • Planet SOI: ~9.25e8 meters (925 million km)
  • Both planets within each other's SOI

Why This Fails:

  • Both planets start with parent=0 (Sun)
  • Both are within each other's SOI
  • find_dominant_body() logic selects closest body within SOI
  • Result: PlanetA selects PlanetB as parent, PlanetB selects PlanetA as parent
  • Config validation passes (both are ≥ parent.radius + body.radius from Sun)

Key Assertions:

// Both should orbit Sun (not each other)
REQUIRE(sim->bodies[PLANET_A_IDX].parent_index == SUN_IDX);
REQUIRE(sim->bodies[PLANET_B_IDX].parent_index == SUN_IDX);

// Planets should never have each other as parents
for (int parent : history.planet_a_parents) {
    REQUIRE(parent != PLANET_B_IDX);
}
for (int parent : history.planet_b_parents) {
    REQUIRE(parent != PLANET_A_IDX);
}

Expected Behavior (Option A):

  • Both planets should continue orbiting Sun
  • Neither should become other's parent
  • This requires future fix to find_dominant_body() logic (mass hierarchy check)

Future Work

Current Status

Tests 1-3 from the parent assignment test suite are now passing. Test 4 continues to fail, documenting a separate mutual SOI issue.

Potential Fixes for Test 4

  1. Add mass hierarchy check to find_dominant_body()
  2. Prevent mutual SOI assignments for similar-mass bodies
  3. Detect and reject invalid configs at load time
  4. Implement proper N-body interaction or restricted 3-body solution

Enhanced Detection

  • SOI overlap detection at config load time
  • Automatic correction of invalid parent assignments
  • Validation warnings for edge cases

References

  • src/simulation.cpp:64-107 - find_dominant_body() implementation
  • tests/configs/mutual_soi_close.toml - Test configuration for mutual SOI case
  • tests/test_invalid_parent_assignment.cpp - Test suite implementation