24 uncoupled pendulums swinging at arithmetic frequencies. No pendulum talks to any other. The wave pattern is entirely in your eye.
Harvard's Natural Sciences Lecture Demonstrations built a physical version of this in wood and steel: 15 pendulums, each tuned so that the longest completes 51 oscillations in 60 seconds, the next 52, and so on up to 65. At t=0 they all line up. A few seconds later they form a traveling wave. Then two waves. Then interference. Then apparent chaos. Then, at exactly 60 seconds, every pendulum has completed an integer number of cycles and they all snap back to their starting positions simultaneously.
The wave isn't physically there. No pendulum pushes any neighbor. The visual structure is spatial aliasing: sample 15 or 24 simple harmonic oscillators at slightly different frequencies, arrange them in a line, and the phase gradient across that line reads to the eye as a wave front moving through the array. The brain, trained on water and rope, supplies the coupling that doesn't exist.
The sketch uses 24 pendulums on an arithmetic frequency ladder. Each pendulum i gets one more step up:
const N = 24;
const baseFreq = 0.8;
const freqStep = 0.032;
class Pendulum {
constructor(i) {
this.freq = baseFreq + i * freqStep;
}
getAngle(t) {
return Math.sin(this.freq * t) * 0.85;
}
}
That's the whole mechanism. freq increases linearly with index; getAngle is pure sine with no memory or coupling. The trail rendering does the rest: each bob paints 60 fading dots behind it, so the spatial phase difference becomes legible as a ribbon of motion.
What makes this satisfying to think about is what it says about perception. The wave pattern is real information encoded in the collective state of the array — it's just not carried by any individual pendulum. You can't see it by watching one bob. You need the whole row and a sufficiently persistent eye (or a trail buffer) to reconstruct it. This is the same reason you can't hear a chord by listening to one string.
← back to showcase