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².
∂²h/∂t² = c² ( ∂²h/∂x² + ∂²h/∂y² ) − k·∂h/∂t
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₂
Разсіювання: чому хвилі та океанічні хвої виглядають по-різному
Реальні хвилі води є розсіяними — різні довжини хвиль рухаються з різною швидкістю, на відміну від звуку в повітрі. Для гравітаційних хвиль великої довжини у глибокій воді фазова швидкість дорівнює v = √(gλ / 2π), тому довші хвилі випереджають коротші (це пояснює, чому далекий штормовий хвіст прибуває як довгий, гладкий океанічний хвилястий рух навіть після того, як буряшний короткий хвильовий рух поблизу шторму згас). Для дуже малих довжин хвиль поверхневе напруження домінує над гравітацією та фізика перевертається в капілярні хвилі, швидкість фази дорівнює v = √(2πσ / ρλ), де σ — поверхневий натяг — тепер коротші довжини хвиль рухаються швидше. Десь приблизно навколо довжини хвилі 1,7 см для води обидва ефекти збалансовані; цей перехід точно є тонким, чітким хвильовим візерунком, який ви бачите на краю бризка, відмінним від широкого, округленого кільця далі. Базова рівняння постійної швидкості, як зазначено вище, ігнорує це розсіювання для простоти — повноцінне розсіяне моделювання потребуватиме залежності фазової швидкості від місцевої просторової частоти.
Wave Reflection
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
Чому від хвиль, створених двома каменями, утворюється смугаста картина замість просто перехресних кіл?
Це відбувається тому, що висоти хвиль додаються лінійно. Коли два піки збігаються, вони посилюють один одного (конструктивна інтерференція, яскрава смуга); коли пік зустрічається з низькою хвилею, вони приглушують один одного (деструктивна інтерференція, спокійна смуга) — це той самий фізичний принцип, що й у класичному шаблоні подвійного прозорості в оптиці.
Чому океанські хвилі виглядають інакше, ніж хвилі на ставку?
Океанські хвилі дисперсні: довгі хвилі, домінуючі гравітацією, рухаються швидше, ніж короткі (v ∝ √λ), тому океанічні хвої випереджають хаотичні короткі хвилі та прибувають у вигляді гладких вали. Дуже короткі хвилі ж домінує поверхневе натягнення, де взаємозв’язок обертається і коротші довжини хвиль рухаються швидше.
Чи моделює симуляція реальну глибину води та в'язкість?
Ні — вона розв’язує спрощену рівняння хвилі постійної швидкості у 2D з терміном затухання для втрати енергії, що правильно відтворює колові фронти та інтерференцію, але не моделює залежність глибини від дисперсії або в'язкість рідини так, як це робить повний розв’язок рівнянь Нав’є-Стокс.
Спробуйте наживо
Усе, що вище, працює прямо у вашому браузері — відкрийте Water Ripples і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.
▶ Відкрити симуляцію Water Ripples