This simulation renders a Saturn-like ring system as tens of thousands of independent Keplerian point particles orbiting a central planet — no collisions or self-gravity are computed, only single-body orbits. Each particle's radius a is fixed at creation, and its angular position advances every frame by the mean motion ω = a−3/2, Kepler's third law in units where the planet's radius equals 1 — so inner particles lap outer ones, the differential shear visible as the disc spins. Toggling the shepherd moon excludes newly sampled particles from a fixed band around its radius, mimicking the resonant gap Mimas carves as Saturn's Cassini Division; particles are shaded in concentric bands purely by radius.
Tens of thousands of point particles orbiting under pure Kepler dynamics (ω ∝ a−3/2): watch inner particles visibly outrun outer ones, radius-based colour banding, and — when the shepherd moon is enabled — a permanent gap opened around its orbital radius, standing in for the real Cassini Division carved by Mimas.
Pick a preset (Saturn / dense / sparse) or drag the particle count, inner/outer radius, tilt and time-speed sliders yourself. Toggle the shepherd moon and slide its position to relocate the gap. Drag to orbit the camera, scroll to zoom, and use Pause/Reset to freeze or rebuild the ring.
Saturn's real Cassini Division is wide enough to fit the planet Mercury inside it. It exists because particles orbiting there would complete exactly two orbits for every one of the moon Mimas's — a 2:1 mean-motion resonance whose repeated gravitational tug clears the gap, the same mechanism this simulation models with its shepherd moon.
Every particle follows Kepler's third law: its angular speed (mean motion) is ω = a−3/2, where a is its orbital radius in the simulation's normalized units (planet radius = 1). Because ω falls off with distance, particles on the inner edge complete far more orbits per second than particles on the outer edge — exactly the differential rotation, or shear, that keeps a real ring flat and prevents it from clumping into a single rigid disc.
The simulation does not calculate gravitational forces between the moon and ring particles. Instead, whenever a new ring is built it repeatedly samples a random orbital radius for each particle and simply rejects (re-samples) any value that falls within a fixed-width band around the moon's chosen radius. The result — a clean, empty annulus at the moon's orbit — visually stands in for the resonant gap-clearing that a real shepherd moon like Mimas produces through repeated gravitational kicks at a 2:1 mean-motion resonance.
No. The Roche limit equation shown in the info panel (d = R·(2ρ_p/ρ_s)^(1/3)) is included for reference only — it is never evaluated in the code, so you can set the inner radius to any value, including inside where a real moon would be tidally disrupted. Likewise, particles have no mass, self-gravity, or collisions; each one is an independent test particle following its own Kepler orbit, which is why the simulation can render up to 100,000 of them in real time.
Colour is computed purely from a particle's orbital radius, not from any physical brightness model. Its position between the inner and outer edge sets a blue-to-warmer hue gradient, and a cosine function of that same position layers a repeating banding pattern on top, with a little random brightness noise added per particle — together producing the striped, banded look real rings have without simulating light scattering off actual ice grains.
No — it only rescales the simulation clock. Every particle's angular position is still phase0 + ω·simTime, so multiplying simTime's increment by the speed slider simply plays the same Keplerian motion faster or slower; the ratio of any two particles' orbital speeds, and the location of the moon's gap, stay exactly the same regardless of the speed setting.