Things That Go Bump in the Night
This is the
$(1,2)$ vibrational mode of an equilateral triangle, in the same spirit as Drumbeat, which showed the
$(1,2)$ mode on the disk, and The Band Plays On and Good Vibrations, which showed the nodal lines of a family of vibrational modes on the square and on the disk, respectively.
I found an analytic expression for the vibrational modes of the equilateral triangle in B.R. Seth's paper "Transverse vibrations of triangular membranes" (available here for free); he in turn credits Lamé's Leçons sur la Théorie Mathématique de L'Elasticité des Corps Solides from 1866, which is encoded in the following function (as noted in Seth's paper, the
$(0,n)$ modes have a somewhat nicer expression in trilinear coordinates, so I wouldn't be surprised if the general
$(m,n)$ mode does as well):
EquilateralVibration[m_, n_, {x_, y_}, t_] := Module[
{a = Sqrt[3]/2},
(2 Sin[(m - n) π x/a] Cos[2 (m + n) π y] -
2 Sin[(2 m + n) π x/a] Cos[2 n π y] +
2 Sin[(2 n + m) π x/a] Cos[2 m π y]) Cos[t]
];
From there, it was just a matter of finding a nice presentation; as in, for example, Catecoid, I ended up wanting a mesh without the surface and ended up using an idea from this thread (this time, @J. M.'s answer) to get variable-color mesh lines.
Here's the rest of the code:
EqMaxVal = With[
{m = 1, n = 2, x = Sqrt[3]/6, y = 1/2, t = 0.},
EquilateralVibration[m, n, {-(x/2) + (Sqrt[3] y)/2, (Sqrt[3] x)/2 + y/2}, t]
];
With[{m = 1, n = 2},
Manipulate[
Show[
ParametricPlot3D[
Evaluate@Table[
{#[[1]], #[[2]], EquilateralVibration[m, n, {#[[1]], #[[2]]}, t]},
{x, 0, Sqrt[3]/2, Sqrt[3]/32}],
{y, 0, 1},
RegionFunction -> Function[{x, y, z}, x - Sqrt[3] y <= 0 && x/Sqrt[3] + y <= 1],
PlotRange -> {{0, Sqrt[3]/2}, {0, 1}, {-6, 6}}, Boxed -> False,
Axes -> None, PlotStyle -> Thickness[.005],
ColorFunction -> Function[{x, y, z}, ColorData["DeepSeaColors"][(z + EqMaxVal)/(2 EqMaxVal)]],
ColorFunctionScaling -> False]
& /@ {{x, y}, {-(x/2) + (Sqrt[3] y)/2, (Sqrt[3] x)/2 + y/2},
{-(Sqrt[3]/4) + x/2 + (Sqrt[3] y)/2, 1/4 + (Sqrt[3] x)/2 - y/2}},
BoxRatios -> {Sqrt[3]/2, 1, 1/EqMaxVal}, ViewPoint -> {-2, 0, 2},
ImageSize -> {540, 405}, ViewAngle -> π/9, Background -> Black],
{t, 0, 2 π}]
]