Click / tap the water to drop a pulse
This 2D companion solves the actual 2D wave equation with a finite-difference time-domain scheme running on a grid, rather than approximating ring waves in a shader: each cell updates from its four neighbours every step, so circular wavefronts, damping and — in two-source mode — genuine interference fringes all emerge from the same local rule real ripple tanks obey. A side panel exposes wave speed, damping, drop amplitude, source pattern and boundary type, with a live readout of elapsed time, peak amplitude, total surface energy and drop count.