Pond Pair
Tap the water — the lily pad rides the ripples and carries their energy across the channel.
Multi-touch works — try both ponds at once!
Design notes ↓
Design Notes
FDTD wave fields. Two 56×56 grids, each stepped 3 substeps per frame using the discrete 2-D wave equation: uNext = 2u − uPrev + C²·∇²u, ×(1−DAMP). C_WAVE = 0.35, DAMP ≈ 0.0018. Dirichlet (zero) outer boundary makes waves reflect. Reference: Van Duyne & Smith, “Physical Modeling with the 2-D Digital Waveguide Mesh,” ICMC 1993.
Sympathetic coupling. The ponds whisper to each other always via edge-column coupling (K ≈ 0.08). This is analogous to sympathetic resonance between two coupled resonators — a ringing in one pond subtly excites the other. The lily pad is the dramatic, visible layer on top.
Lily pad carrier. The pad bobs on the local wave height (lowpass-filtered) and drifts from the wave-gradient vector (a wave pushes the pad like a real object riding a water surface). When accumulated field energy exceeds a threshold and the pad has drifted near the channel edge, it begins crossing. On arrival it injects a Gaussian bump and triggers a sparkle chime. The golden dot on the pad visualises carried energy.
Audio. Pond A: low pentatonic C3–A3. Pond B: high pentatonic C4–A4 (harmonising register). Bell tones use a 12ms attack, 1.2s exponential release. An always-on C3+G3 ambient pad keeps the space alive. All audio passes through a DynamicsCompressor brick-wall limiter for child safety.
Rendering. Canvas2D only: per-frame pixel fill via createImageData + putImageData (no Three.js, no WebGL). The lily pad is drawn with arc/path primitives and radial gradients.
Unverified: pixel-fill at 60fps may lag on very large canvases on low-end devices (consider reducing GRID to 40 if needed). Pad crossing threshold is tuned aesthetically, not physically. The sympathetic coupling is simplified (edge-column only). Bell note timing is approximate.