Some math is easier to feel than to read. This is a small, growing collection of interactive visualizations of concepts I find beautiful — gradients sliding into alignment, waves unrolling into circles, fields flowing, matrices quietly bending space. Drag, orbit, and tune each one; the math answers back in real time. No build step, no framework — just open a page and play.
Every periodic signal is a sum of pure rotations. Draw each frequency as a spinning vector and stack them, or wind a signal around a circle and watch it lean off-center exactly at its own frequencies — X(f) = ∫ g(t) e−2πift dt.
Chain rotating harmonic vectors tip-to-tail and their final height traces the partial sum. Watch square, sawtooth, and triangle waves build up — and the Gibbs ringing that never quite goes away.
OpenWrap a two-tone signal around a cylinder at a tunable frequency. When the winding hits a real frequency in the signal, the coil's center of mass lurches off-axis and the spectrum spikes.
OpenA field assigns an arrow to every point — the way the state moves next. Follow the arrows and you get flow: ẋ = f(x). Its eigenvalues classify the fixed point; its divergence and curl say whether it spreads or spins.
A live linear vector field you can click to release particles into. Watch them spiral, diverge, or orbit — with the fixed point classified from the trace and determinant in real time.
OpenThousands of tracer particles swept along the field — spiralling out of a saddle-focus, orbiting a vortex, or winding forever around the two wings of the Lorenz attractor.
OpenDrag a probe through the field: a ring breathes with the divergence (source or sink) while a paddlewheel turns with the curl. The whole vocabulary of vector calculus in one picture.
OpenThe matrix that converts joint velocity into end-effector velocity. Its columns are what each joint does alone; their span is every direction the hand can move — and where it can't, the arm is at a singularity.
A two-link arm with a live manipulability ellipse. Drive it to full extension and watch det J → 0: the ellipse collapses to a line and the arm loses a degree of freedom.
OpenA spatial 3-DOF arm with its velocity ellipsoid computed live from the SVD of J. Fat and round means nimble; flat means near-singular. Yoshikawa's manipulability measure updates as you pose it.
OpenMinimizing means walking downhill — but how you step decides everything. Steepest descent, momentum, and Newton's method all chase the same minimum with wildly different paths.
Optimize with a string attached. At a constrained optimum the constraint runs tangent to a level set of the objective, so their gradients align: ∇f = λ∇g — the geometry inside every constrained optimizer and the KKT conditions.
Drag a point around the constraint over the objective's contour rings. The ∇f and ∇g arrows rotate into alignment at the optimum, with a live alignment meter and snap-to-optimum.
OpenThe objective as a surface, the constraint a ribbon draped across it. The constrained optimum is the ribbon's high point; toggle a level curve to watch it go tangent at the crest.
OpenUnderneath all of it: the two moves of calculus, and the trick of rebuilding any curve from a single point. Simpler pictures, but the ideas everything else is built on.
Slide a point along a curve: the top panel shows the tangent's slope and the shaded area so far, the bottom shows the area curve — whose slope is exactly the height above. Differentiation and integration, inverse to each other.
OpenAdd terms to a Taylor polynomial and watch it snap onto sin, eˣ, or 1/(1−x), matching one more derivative each time — and diverging past its radius of convergence no matter how many you add.
OpenMost vectors get rotated by a matrix. Eigenvectors are the special directions that come out pointing the same way — only scaled by Av = λv. They run stability, vibration modes, PCA, and diagonalization. In three dimensions some axis always survives — and when the other two eigenvalues go complex, what survives instead is a whole plane.
Tune a 2×2 matrix and drag a probe around the unit circle. Its image lights up green exactly on the eigen-directions — and vanishes into pure rotation when the eigenvalues go complex.
OpenA real cubic always has a real root, so some line through the origin always survives. Edit the matrix and watch drifting directions fall onto the winning axis — or spiral into the plane a complex pair leaves invariant but never still.
OpenFinding the signal by trusting less. Fuse a motion model's prediction with a noisy measurement, weighed by how much you trust each, and track the truth better than any raw sensor could.
A rigid-body pose is a rotation and a translation bundled into one element of the group SE(3). Chasles' theorem says every such motion is a single screw — a rotation about an axis and a slide along it — and the exponential map exp(sξ) unwinds a twist into exactly that.
A few more ideas I'd like to give the same treatment.
One signal sliding across another — the operation behind filters and every CNN.