
Dance
Speaking of vibration modes of a square drum , here are the Chladni figures for linear combinations of the (20,21) and (21,20) vibration modes of the square.
This is entirely in the spirit of The Band Plays On ; since that was a while ago, let me quote from that description:
Cribbing from the MathWorld article, the vertical displacement of the (p,q) vibration mode of a 1 \times 1 square drum is
u_{pq}(x,y) = (A \cos \omega_{pq} t + B \sin \omega_{pq} t) \sin(p \pi x) \sin (q \pi y),
where \omega_{pq} = \pi \sqrt{p^2 + q^2}. This is easy enough to turn into a function:
?[p_, q_] := ? Sqrt[p^2 + q^2];
?[x_, y_, t_, p_, q_, A_, B_] := (A Cos[?[p, q] t] + B Sin[?[p, q] t]) Sin[p ? x] Sin[q ? y];
In fact, the same holds for arbitrary rectangles, so long as the product of sines becomes \sin(p\pi x/L_x)\sin(p \pi y/L_y) where L_x and L_y are the lengths of the sides of the rectangle. The nice thing about squares is that you get an extra symmetry: the (p,q) mode and the (q,p) mode have the same frequency, so any linear combination will also form a standing wave.
In this GIF, I’m taking the combination u = u_{20,21} + c u_{21,20} and (by letting c=\tan \theta) varying c from -\infty to \infty. The curves in the animation are the so-called Chladni figures, or nodal lines of the vibration, meaning the solutions of u=0.
Here’s the code which does not produce a Manipulate[] that updates nicely in real time, unfortunately):
With[{p = 20, q = 21, A = 1, B = 0,
cols = RGBColor /@ {"#a2ef44", "#08085e"}},
Manipulate[
ContourPlot[
?[x, y, 0., p, q, A, B] + Tan[(?/2 - .0001) 2 (? - ?/2)/?] ?[x, y, 0., q, p, A, B] == 0,
{x, .01, .99}, {y, .01, .99},
Axes -> False, Frame -> False, PlotPoints -> 50,
ContourStyle -> Directive[CapForm["Round"], Thickness[.01], cols[[1]]],
PlotRangePadding -> -0.01, ImageSize -> 540,
Background -> cols[[-1]]],
{?, 0, ?}]
]