The science
Sand on a vibrating plate is shaken away from the antinodes (large motion) and collects on the nodal lines, where the plate stays still. This page shows the pattern from above and counts the grains.
Model: f(x,y) = cos(nπx)cos(mπy) − cos(mπx)cos(nπy) on the unit square (the same eigenfunction the 3D page uses). Each grain drifts down the gradient of f²/2: dr/dt = −k f ∇f plus a random kick proportional to the local vibration |f|. Grains therefore settle where f = 0 and stay mobile near antinodes.
- Because
f(x,y) = −f(y,x) the diagonal is always nodal; for n = m the pattern vanishes.
- For a real free square plate the resonance frequency grows roughly like
n² + m², so higher patterns need higher pitch.
- Orthogonality:
∫∫ f² dx dy = 1/2 for n ≠ m; the check button verifies it numerically.
Honest simplifications: the eigenfunction is the classic textbook approximation (no free-edge boundary conditions or plate stiffness), grains do not collide, and the 3D page uses a circular plate where this page shows a square one. The sand statistics are measured, not drawn.