The pond on the home page is a numerical solution of the damped wave equation, drawn one character per grid cell:
∂t2∂2u=c2∇2u−γ∂t∂u
The catch is that a character cell is not square. A monospaced glyph advances about 0.6em, and with a line height of 1.2em every cell is twice as tall as it is wide. A grid that pretends the two spacings are equal stretches every ripple into a 2:1 ellipse.
with rx=c2Δt2/Δx2 and ry=c2Δt2/Δy2. Setting Δy=2Δx gives ry=rx/4, so the shape of the screen is absorbed into the coefficients rather than distorting the geometry.
Stability
An explicit scheme is only stable if its numerical domain of dependence contains the physical one. For this scheme in two dimensions, the Courant–Friedrichs–Lewy condition reads
c2Δt2(Δx21+Δy21)≤1⟺rx+ry≤1.
The pond uses rx=0.5 and ry=0.125, so rx+ry=0.625: comfortably stable, with headroom to make the waves faster.
Damping and drawing
Instead of differencing the γ∂u/∂t term, each update is multiplied by (1−ε) with ε=0.004. For a single mode, the two roots of the resulting recurrence are complex conjugates whose product is 1−ε, so a free ripple decays as (1−ε)n/2≈e−εn/2 after n steps.
Each cell then picks a glyph from the density ramp . · : - = + * # % according to ∣u∣, and crests above u=0.3 are drawn in the accent colour, so peaks and troughs stay distinguishable.