A pool is a 2D wave equation
Drop a stone in still water and the disturbance spreads as a nearly circular ring. The height of the surface h(x, y, t) obeys the 2D wave equation, the same equation that governs sound in a membrane or vibrations on a drumhead:
∂²h/∂t² = c² ( ∂²h/∂x² + ∂²h/∂y² ) − k·∂h/∂t
c is the wave speed, and the last term is a damping coefficient k that bleeds energy out of the system so ripples decay instead of ringing forever. A live simulation discretises this on a grid and steps it forward with a simple explicit scheme: each cell's next height is computed from its own current and previous height plus the average of its four neighbours, which is exactly a finite-difference stand-in for the Laplacian ∂²h/∂x² + ∂²h/∂y².
Circular wavefronts from a point source
A disturbance introduced at a single grid cell spreads outward because the equation is isotropic — the discretised Laplacian treats all directions equally on a fine enough grid — so the wavefront is a growing ring at radius c·t. This is a direct 2D analogue of Huygens' principle: every point the wavefront reaches becomes a new source of secondary wavelets, and their envelope is again a circle expanding at speed c. On a coarse square grid this isotropy is only approximate — waves along the diagonals travel very slightly faster than waves along the axes unless the stencil is chosen carefully, which is why production ripple shaders use a plus-shaped neighbour average rather than a coarser box filter.
Interference: adding heights, not intensities
Drop two stones and the resulting pattern is not two independent rings — it is their superposition, because the wave equation is linear: the total displacement at any point is simply the sum of the two individual wave solutions. Where two crests coincide the surface rises higher (constructive interference); where a crest meets a trough they cancel (destructive interference). The classic result is a static fringe pattern of alternating bright and dark bands radiating from between the two sources — visually identical to the two-slit interference pattern from optics, because both are governed by the same linear wave mathematics.
h_total(x, y, t) = h₁(x, y, t) + h₂(x, y, t) // linear superposition, not h₁ · h₂
Dispersion: why ripples and ocean swell look different
Real water waves are dispersive — different wavelengths travel at different speeds, unlike sound in air. For long-wavelength gravity waves in deep water the phase speed is v = √(gλ / 2π), so longer waves outrun shorter ones (this is why distant storm swell arrives as long, smooth ocean rollers even after the choppy short waves near the storm have died out). For very short wavelengths, surface tension dominates over gravity and the physics flips to capillary waves, with phase speed v = √(2πσ / ρλ) where σ is surface tension — now shorter wavelengths move faster. Somewhere around a wavelength of about 1.7 cm for water the two effects balance; that crossover is exactly the fine, sharp ripple pattern you see right at the edge of a splash, distinct from the broad, rounded ring farther out. A basic constant-speed wave equation like the one above ignores this dispersion for simplicity — a fully dispersive simulation would need the wave speed to depend on the local spatial frequency.
Reflection at the boundary
When a ripple reaches the edge of the pool it reflects. A free boundary (open edge) reflects the wave in phase, so a crest bounces back as a crest; a fixed boundary (a rigid wall, or in the discretised grid, a cell forced to height zero) reflects with a sign flip, so a crest returns as a trough. Which one the simulation uses changes whether reflected ripples reinforce or cancel the ones still arriving — a visible, physically meaningful detail rather than a rendering choice.
Frequently asked questions
Why do ripples from two stones create a striped pattern instead of just overlapping circles?
Because wave heights add linearly. Where two peaks line up they reinforce (constructive interference, a bright band); where a peak meets a trough they cancel (destructive interference, a calm band) — the same physics as the classic double-slit interference pattern in optics.
Why do ocean waves look different from the ripples in a pond?
Water waves are dispersive: long gravity-dominated waves travel faster than short ones (v ∝ √λ), so ocean swell outruns the choppy short waves and arrives as smooth rollers. Very short ripples are dominated by surface tension instead, where the relationship reverses and shorter wavelengths move faster.
Does the simulation model real water depth and viscosity?
No — it solves a simplified constant-speed 2D wave equation with a damping term for energy loss, which reproduces circular wavefronts and interference correctly but does not model depth-dependent dispersion or fluid viscosity the way a full Navier–Stokes solver would.
Try it live
Everything above runs in your browser — open Water Ripples and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.
▶ Open Water Ripples simulation