For a smooth plane curve r(u) = (x(u), y(u)), the 2D Frenet frame is just two vectors — the unit tangent T and the unit normal N, obtained by rotating T a quarter turn:
T = r′ / |r′|
N = rotate90(T) = (−T_y, T_x)
Unlike in 3D, a plane curve has no torsion — it never twists out of its own plane. What replaces torsion here is the sign of the curvature itself: κ > 0 means the curve is turning left (toward N), κ < 0 means it is turning right. That sign is a genuinely 2D notion; in 3D, κ is defined unsigned because the binormal's own orientation absorbs it.
κ(u) = (x′y″ − y′x″) / |r′|³
R = 1/|κ| (osculating-circle radius)
center = r(u) + R·N (its center, on the concave side)
The evolute is the curve traced by that center as u sweeps the whole loop — the locus of all osculating-circle centers. It develops cusps exactly where curvature is locally extremal (the curve's "vertices"), which is the 2D analogue of how 3D torsion flags where a curve leaves its osculating plane.
Integrating signed curvature against arc length all the way around a closed loop gives 2π times an integer — the turning number (Whitney–Graustein / Hopf Umlaufsatz theorem). A simple convex loop like the ellipse turns exactly once (turning number 1); a curve with a self-crossing inner loop, like the limaçon, or with several lobes, like the rose, winds its tangent around more than once even though it only traces one closed path — the "Turning so far" readout accumulates this integral live as you scrub the slider, and the fixed "Total turning number" box reports the value for the whole loop, computed the same way, as an integer-verification check.
- Curve dropdown — switches between an ellipse (turning number 1), a limaçon with an inner loop (turning number 2) and a 3-petal rose (turning number 4, since this parametrization traces the geometric rose twice over one full parameter loop).
- Position slider — moves the frame to any point on the curve; derivatives are evaluated numerically by central differences, exactly as the 3D Frenet–Serret simulation does.
- Play / speed — animates the frame continuously along the curve at the chosen rate.
This signed-curvature/evolute pair is the real-world tool behind cam and gear-tooth profile design, and behind why a train rail's curvature is engineered to change smoothly (no curvature "vertex" jumps) so the ride doesn't jerk.