
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) \[Pi] x/a] Cos[2 (m + n) \[Pi] y] -
2 Sin[(2 m + n) \[Pi] x/a] Cos[2 n \[Pi] y] +
2 Sin[(2 n + m) \[Pi] x/a] Cos[2 m \[Pi] 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 -> \[Pi]/9, Background -> Black],
{t, 0, 2 \[Pi]}]
]