Three suns · One world · Sensitive to initial conditions
ThreeBody
Three suns pulling a world between them under real gravity. No closed-form solution, and never the same sky twice.
- Suns
- 03
- Solution
- None known
- Era
- Measuring
- Surface
- —
The sky behind this page is integrated, not animated.
There is no keyframed loop here and no recorded path. Three stars pull on one another under real gravity, integrated step by step in your browser, and the light on the ground is whatever that produces — the three-body problem has no closed-form solution to fall back on. The world you are standing on is along for the ride: it feels all three and is far too light to pull back. Every load draws a fresh random seed, so the triple overhead is never the one from your last visit, even on a quick reload where the sky looks familiar at a glance.
- Integrator
- Velocity Verlet, adaptive
- Step
- h ∝ rₘᵢₙ^1.5
- Bodies
- 3 stars + 1 world
- Time scale
- 1s ≈ 2 days
- Day length
- 6 min
- Catalogue
- HYG v4.1
- 01
Seeding
Three equal stellar masses drawn uniformly in a ball, rejected until no pair starts closer than 0.55, then recentred on the barycentre. Velocities are momentum-cancelled and rescaled to 32% of the virial energy — deliberately under the value that would hold an orbit, so the system falls inward before it does anything else. The world is placed afterwards, out between 1.6 and 4.8, moving at the circular speed for whatever field the three of them happen to make there.
- 02
Integration
Softened Newtonian gravity under velocity Verlet, which is symplectic: it conserves energy over long runs instead of drifting the way a naive Euler step does. The step size adapts as the 3/2 power of the closest pair's separation — the free-fall time of that pair — so a hard encounter is resolved accurately rather than explosively. Over 24 seeds and a minute each, the worst drift in the softened Hamiltonian is 0.004%.
- 03
Chaos
No choreography, no figure-eight, no closed loop. Initial conditions are random per visit and the system is advanced by an amount taken from the wall clock before the first frame, so the page picks it up wherever it happens to be. Measured over 24 seeds, the distance between two stars swings between its closest and its widest by a median factor of 54.
- 04
Losing the world
Bound triples of equal mass do not last, and neither does anything orbiting inside one. Measured over 24 seeds, about two visits in five lose the system inside twelve minutes: a quarter of them lose the world itself — flung clear of the system, or swallowed whole by a star — and the rest lose a star, thrown out for good. Heat alone never ends a visit. The surface peaks around 500°C, which is Venus, and Venus is still a planet; being too hot to stand on is what a Chaotic era already says. When the system does go, the readout names which of the two it was, the scene crossfades, and a fresh one is drawn rather than pretending the old one was still there.
- 05
The sky
Three stars, and the rock you are standing on — far too light to pull back on any of them, which is exactly how it is modelled. The camera only ever rotates, so everything above the horizon is placed by direction on a fixed celestial sphere: apparent size is atan(radius / distance) and illumination is the square of the same ratio, the solid angle of the disc. Stars and constellation figures are the real HYG catalogue, and they wash out exactly as the suns close in.
- 06
Eras
The readout at the top of this page is live, and both halves of it come from the same number. Surface temperature is the fourth root of the light arriving from all three suns, lagged the way rock lags: it keeps climbing after a sun has set. A Stable Era is then claimed when that temperature holds somewhere survivable for about a fortnight of simulated time, and a Chaotic Era is declared the moment it leaves, in one of two directions. Measured across 40 visits, the ground spends 27% of its time survivable, 42% too hot and 31% too cold, and about half of visits see a Stable Era at all — around eight minutes long when it comes.
- 07
Frame budget
The render loop owns the scene graph. Positions, opacities and shader uniforms are written straight into preallocated typed arrays each frame, nothing allocates inside the loop or the integrator, and no per-frame value passes through React state.