Newtonian core

Simulation state uses physical units first.

The simulator treats rendering as a view of SI-unit state. This page names the assumptions that make the current model readable and testable.

Core equation

a = G * source_mass / distance^3 * displacement

The implementation scales the displacement vector directly, so direction and magnitude remain coupled in src/sim/physics.c.

Source-backed model facts

  • src/sim/vec3d.c provides double-precision vector operations.
  • src/sim/body.c stores mass, radius, position, velocity, and acceleration in SI units.
  • src/sim/physics.c computes Newtonian point-mass acceleration.
  • src/sim/solar_system.c initializes the Sun, all eight planets, moons, and Vesta with parent-aware states.
  • src/sim/orbit.c propagates elliptic, parabolic and hyperbolic source orbits with a bracketed universal-variable solver. The atlas uses the same C kernel compiled to a small standalone WASM module.
  • src/sim/experiment.c reads bounded selected-body input. Planet states use a pinned Sun-centered Horizons snapshot at JD 2461200.5 TDB; selected source orbits are two-body propagated to that epoch before force integration.
  • src/sim/satellite.c converts Jovian mean elements and Laplace/ecliptic source frames into parent-relative SI states. The versioned data/jovian_moons.json catalog covers 115 Jupiter moons.
  • The core/catalog integrator is velocity-Verlet / kick-drift-kick. Guided lessons also offer explicit Euler as a labeled numerical comparison.
  • src/app/simulation_step.c accumulates frame time and advances in fixed 15-second simulation steps for core/catalog runs, retaining the remainder for the next frame. Lessons can select a different fixed step; it never follows frame duration.
  • src/sim/diagnostics.c measures energy, momentum and center of mass. src/sim/lessons.c supplies isolated experiments with independently tested convergence and free-pair conservation.
  • src/app/comparison.c publishes matched C checkpoints for two runs, with bounded history and analytical references where justified. src/sim/collisions.c implements only the opt-in head-on sphere lesson; other scenes keep point-mass dynamics.

Known approximations

A moon can stay near its parent while drifting to the wrong place around its orbit. The 100-day checks in tests/test_simulation_step.c require less than one degree of isolated Phobos/Deimos phase error against analytical Kepler solutions, plus less than 1% parent-relative position discrepancy when the full scene is rerun with half-sized steps.

Physics steps and trail sampling have separate cadences: improving numerical accuracy must not accelerate the loss of historical trail detail.

The Sun remains fixed in the core/catalog scene. Jovian moon inclinations and orbital directions come from source elements; core planet initialization through Neptune remains planar. The isolated Earth–Moon lesson uses barycentric initialization, while the barycentric-core lesson releases the Sun and shifts all 128 initial states into the center-of-mass frame. The project does not claim relativistic precession, planetary oblateness, or ephemeris accuracy.

Unknown-mass moons are test particles: they feel gravity without exerting it. Missing mass/radius values display as Unknown and published model estimates are labeled. The 2048-step update budget retains unconsumed time while keeping input responsive.

The complete source catalog is an exploration dataset, not a million-body active simulation. Selected catalog experiments contain the Sun, eight planets, and at most 16 selected objects so the physical model and its numerical costs remain inspectable.