MATH-430 · Lesson 3 of 12 · 26 min

Curvature, torsion and the Frenet–Serret frame

How much does a curve bend, and how much does it twist out of a plane? This lesson answers both questions with two functions of arc length, the curvature \(\kappa\) and the torsion \(\tau\). Along the way it builds an orthonormal frame that travels with the curve, the Frenet–Serret frame of tangent, normal and binormal vectors, whose derivatives are expressed in the frame itself by three short equations. Those equations lead to the fundamental theorem of curves: curvature and torsion, as functions of arc length, determine a space curve up to a rigid motion.

Curvature

Let \(\alpha(s)\) be a unit-speed curve, so that \(T(s) = \alpha'(s)\) is a unit vector, the unit tangent. As we move along the curve, \(T\) changes direction, and the faster it changes, the more the curve bends. We define the curvature as the speed at which the tangent turns:

\[\kappa(s) = |T'(s)| = |\alpha''(s)|.\]

For a straight line \(\alpha(s) = p + sv\) with \(|v| = 1\), \(\alpha'' = 0\) and \(\kappa = 0\). Conversely, if \(\kappa \equiv 0\) then \(\alpha'' = 0\), so \(\alpha' = v\) is constant and \(\alpha(s) = p + sv\) is a line: curvature vanishes identically exactly for lines. For a circle of radius \(r\) parametrized by arc length, \(\alpha(s) = (r\cos(s/r), r\sin(s/r))\), we get \(\alpha''(s) = -\frac{1}{r}(\cos(s/r), \sin(s/r))\) and \(\kappa = 1/r\). Small circles bend sharply; large circles are nearly straight.

Why insist on arc length? With an arbitrary parameter, \(|\alpha''(t)|\) mixes bending with changes of speed: a car driving along a straight road while braking has nonzero acceleration but no curvature. Arc length removes the speed, so \(\kappa\) is a property of the trace. It is unchanged by reversing orientation, since \(\alpha(-s)\) has second derivative \(\alpha''(-s)\).

The normal vector and the osculating circle

Because \(T\) has constant length, \(T'\) is perpendicular to \(T\) (lesson 1). Where \(\kappa(s) > 0\) we define the principal normal \(N(s) = T'(s)/\kappa(s)\), the unit vector in the direction the curve is turning, so that

\[T' = \kappa N.\]

The plane through \(\alpha(s)\) spanned by \(T\) and \(N\) is the osculating plane, the plane that best fits the curve near that point. The circle in the osculating plane with centre \(\alpha(s) + \frac{1}{\kappa(s)}N(s)\) and radius \(1/\kappa(s)\) is the osculating circle, and \(1/\kappa\) is the radius of curvature. The name, from the Latin for kissing, was given by Leibniz. The osculating circle is tangent to the curve and has the same curvature; equivalently, it agrees with the curve to second order. To see this, Taylor's theorem gives \(\alpha(s_0 + h) = \alpha(s_0) + hT + \frac{h^2}{2}\kappa N + O(h^3)\), and the unit-speed parametrization of the osculating circle with the same starting point and tangent has the same expansion up to \(h^2\).

The parabola y equals x squared over 2 drawn with osculating circles at x equals 0, 1 and minus 1. The circle at the vertex has radius 1; the other two have radius about 2.83, and all three lie on the concave side of the curve.
Osculating circles of the parabola \(y = x^2/2\). At the vertex the curvature is 1; it decreases as the parabola flattens

Where \(\kappa = 0\), for instance at an inflection point of a plane curve, \(N\) is not defined, and the theory of the frame below needs \(\kappa > 0\). We assume this from now on when discussing space curves. For plane curves there is a better option, discussed next.

Signed curvature of plane curves

A plane curve has a canonical normal: rotate \(T\) counterclockwise by a right angle. If \(T = (\cos\theta, \sin\theta)\), set \(J T = (-\sin\theta, \cos\theta)\). Then \(T'\) is a multiple of \(JT\), and we define the signed curvature \(k\) by \(T' = k\,JT\). If \(\theta(s)\) is a continuous choice of the angle of \(T\), then \(T' = \theta'(s)(-\sin\theta, \cos\theta)\), so

\[k(s) = \theta'(s), \qquad \kappa(s) = |k(s)|.\]

Signed curvature is positive where the curve turns left and negative where it turns right; it changes sign at inflection points. It changes sign under orientation reversal. Unlike \(\kappa\), it determines a plane curve completely: given \(k(s)\), integrate once to get \(\theta(s) = \theta_0 + \int k\), and again to get \(\alpha(s) = p + \int (\cos\theta, \sin\theta)\,ds\). The constants \(p\) and \(\theta_0\) are a translation and a rotation. Lesson 4 builds global theorems on this angle function.

Torsion and the binormal

For a space curve with \(\kappa > 0\) the binormal is \(B = T \times N\), so that \((T, N, B)\) is a positively oriented orthonormal basis at each point, the Frenet–Serret frame. Its derivative \(B'\) measures how fast the osculating plane rotates. Two observations pin it down. First, \(B' \perp B\) because \(|B| = 1\). Second, \(B' = T' \times N + T \times N' = \kappa N \times N + T \times N' = T \times N'\), which is perpendicular to \(T\). So \(B'\) is a multiple of \(N\), and we define the torsion \(\tau\) by

\[B' = -\tau N.\]

The minus sign is a common convention that makes the torsion of a right-handed helix positive; some books, including do Carmo's, use the opposite sign. Finally \(N = B \times T\), so \(N' = B' \times T + B \times T' = -\tau N \times T + \kappa B \times N = \tau B - \kappa T\). Collecting the three derivatives gives the Frenet–Serret equations:

\[\begin{aligned} T' &= \kappa N, \\ N' &= -\kappa T + \tau B, \\ B' &= -\tau N. \end{aligned}\]

In matrix form the derivative of the frame is the frame times the skew-symmetric matrix with entries \(\kappa\) and \(\tau\). Skew-symmetry is no accident: it is the infinitesimal form of the fact that the frame stays orthonormal, since differentiating \(T \cdot N = 0\) gives \(T' \cdot N = -T \cdot N'\), and so on.

Theorem. A curve with \(\kappa > 0\) lies in a plane if and only if \(\tau \equiv 0\).

Proof. If \(\tau \equiv 0\) then \(B' = 0\) and \(B = B_0\) is constant. Then \(\frac{d}{ds}\big(\alpha(s) \cdot B_0\big) = T \cdot B_0 = 0\), so \(\alpha(s) \cdot B_0\) is constant and the curve lies in a plane perpendicular to \(B_0\). Conversely, if the curve lies in the plane \(x \cdot u = c\) with \(u\) a unit vector, then differentiating twice gives \(T \cdot u = 0\) and \(\kappa N \cdot u = 0\), so \(T\) and \(N\) are perpendicular to \(u\), \(B = \pm u\) is constant, and \(\tau = 0\). \(\blacksquare\)

Formulas for an arbitrary parameter

In practice curves rarely come with unit speed. Let \(\alpha(t)\) be regular with speed \(v = |\alpha'(t)|\), and use the chain rule \(\frac{d}{dt} = v\frac{d}{ds}\). Then \(\alpha' = vT\) and \(\alpha'' = v'T + v^2\kappa N\). Taking the cross product, \(\alpha' \times \alpha'' = v^3\kappa\,T \times N = v^3\kappa B\), which gives

\[\kappa = \frac{|\alpha' \times \alpha''|}{|\alpha'|^3}, \qquad B = \frac{\alpha' \times \alpha''}{|\alpha' \times \alpha''|}.\]

One more derivative gives the torsion. The \(B\) component of \(\alpha'''\) comes only from differentiating \(v^2\kappa N\), where \(N' = v(-\kappa T + \tau B)\) contributes \(v^3\kappa\tau B\). So \((\alpha' \times \alpha'') \cdot \alpha''' = v^3\kappa\,B \cdot \alpha''' = v^6\kappa^2\tau\), and

\[\tau = \frac{(\alpha' \times \alpha'') \cdot \alpha'''}{|\alpha' \times \alpha''|^2}.\]

For a plane graph \(y = f(x)\), the same computation with \(\alpha(x) = (x, f(x), 0)\) gives the signed curvature \(k = f''/(1 + f'^2)^{3/2}\). For the parabola \(y = x^2/2\) of the figure, \(k = 1/(1 + x^2)^{3/2}\), which is 1 at the vertex and about 0.354 at \(x = 1\).

Worked problem

Curvature and torsion of a helix

Find \(\kappa\), \(\tau\) and the Frenet frame of \(\alpha(t) = (a\cos t, a\sin t, bt)\), with \(a > 0\).

Show solution
  1. \(\alpha' = (-a\sin t, a\cos t, b)\), \(\alpha'' = (-a\cos t, -a\sin t, 0)\), \(\alpha''' = (a\sin t, -a\cos t, 0)\), and \(|\alpha'| = \sqrt{a^2 + b^2} = c\).
  2. \(\alpha' \times \alpha'' = (ab\sin t, -ab\cos t, a^2)\), with length \(a\sqrt{b^2 + a^2} = ac\).
  3. So \(\kappa = ac/c^3 = a/(a^2 + b^2)\).
  4. \((\alpha' \times \alpha'') \cdot \alpha''' = a^2b\sin^2 t + a^2b\cos^2 t = a^2b\), so \(\tau = a^2b/(a^2c^2) = b/(a^2 + b^2)\).
  5. \(T = \frac{1}{c}(-a\sin t, a\cos t, b)\), \(N = (-\cos t, -\sin t, 0)\) pointing at the axis, and \(B = \frac{1}{c}(b\sin t, -b\cos t, a)\).

Answer: \(\kappa = a/(a^2 + b^2)\) and \(\tau = b/(a^2 + b^2)\) are both constant. The normal always points horizontally toward the axis. A right-handed helix (\(b > 0\)) has positive torsion; its mirror image has negative torsion. As \(b \to 0\) the helix flattens to a circle with \(\kappa = 1/a\) and \(\tau = 0\).

A helix winding upward around a vertical axis, with the tangent, normal and binormal vectors drawn at three points. The normal vectors point horizontally toward the axis and the binormals tilt toward the vertical.
The Frenet–Serret frame along a helix. Constant curvature and torsion make the frame move like a rigid body screwing along the axis

The fundamental theorem of curves

Rigid motions, compositions of rotations and translations \(x \mapsto Ax + p\) with \(A\) orthogonal of determinant 1, preserve lengths, dot products and cross products, so they preserve \(\kappa\) and \(\tau\). The fundamental theorem says that nothing else can: curvature and torsion are a complete set of invariants.

Theorem. Given smooth functions \(\kappa(s) > 0\) and \(\tau(s)\) on an interval \(I\), there is a unit-speed curve \(\alpha : I \to \mathbb{R}^3\) with curvature \(\kappa\) and torsion \(\tau\). Any two such curves differ by a rigid motion.

Proof of existence. The Frenet–Serret equations are a linear system of nine first-order ordinary differential equations for the components of \(T, N, B\). By the existence and uniqueness theorem for linear systems, for any initial frame at \(s_0\) there is a unique solution on all of \(I\). Choose the initial frame orthonormal and positively oriented. The matrix of dot products \(T \cdot T, T \cdot N, \dots\) satisfies its own linear system, derived from the Frenet–Serret equations, of which the identity matrix is a constant solution; by uniqueness, the frame stays orthonormal, and by continuity of the determinant it stays positively oriented. Define \(\alpha(s) = \int_{s_0}^{s} T(u)\,du\). Then \(\alpha' = T\) is a unit vector, \(\alpha'' = \kappa N\) has length \(\kappa\), and the remaining equations show that \(\alpha\) has normal \(N\), binormal \(B\) and torsion \(\tau\).

Proof of uniqueness. Let \(\alpha\) and \(\bar\alpha\) both have curvature \(\kappa\) and torsion \(\tau\). Apply a rigid motion to \(\bar\alpha\) so that \(\bar\alpha(s_0) = \alpha(s_0)\) and the two frames agree at \(s_0\). Consider

\[f(s) = T \cdot \bar T + N \cdot \bar N + B \cdot \bar B.\]

Using the Frenet–Serret equations for both curves, \(f' = \kappa N \cdot \bar T + \kappa T \cdot \bar N - \kappa T \cdot \bar N + \tau B \cdot \bar N - \kappa N \cdot \bar T + \tau N \cdot \bar B - \tau N \cdot \bar B - \tau B \cdot \bar N = 0\). So \(f \equiv f(s_0) = 3\). Since each dot product of unit vectors is at most 1, each equals 1, so \(T = \bar T\), \(N = \bar N\), \(B = \bar B\) everywhere. Then \(\alpha' = \bar\alpha'\) and the curves agree because they start at the same point. \(\blacksquare\)

A corollary: a curve with constant \(\kappa > 0\) and constant \(\tau\) is a circular helix (or a circle if \(\tau = 0\)), because a helix with \(a = \kappa/(\kappa^2 + \tau^2)\) and \(b = \tau/(\kappa^2 + \tau^2)\) has these invariants. Curves for which \(\tau/\kappa\) is constant are the general helices, whose tangents make a constant angle with a fixed direction, a theorem of Michel Ange Lancret from 1802.

Computing with the frame

The program does two things. It computes \(\kappa\) and \(\tau\) of the helix with \(a = 2\), \(b = 1\) and of the twisted cubic \((t, t^2, t^3)\), once by the exact formulas with hand-computed derivatives and once by central finite differences, to show how well numerical differentiation works (and where it starts to lose accuracy, at the third derivative). Then it runs the fundamental theorem backward: starting only from constant \(\kappa = 0.4\) and \(\tau = 0.2\), it integrates the Frenet–Serret equations with the fourth-order Runge–Kutta method and checks that the curve it builds is the helix with \(a = 2\), \(b = 1\), up to a rigid motion, by comparing distances between points.

Curvature and torsion by formula and by finite differences, and a curve rebuilt from its curvature and torsion
import math

def sub(a, b): return [a[i] - b[i] for i in range(3)]
def add(a, b, k=1.0): return [a[i] + k * b[i] for i in range(3)]
def dot(a, b): return sum(a[i] * b[i] for i in range(3))
def cross(a, b): return [a[1]*b[2] - a[2]*b[1], a[2]*b[0] - a[0]*b[2], a[0]*b[1] - a[1]*b[0]]
def norm(a): return math.sqrt(dot(a, a))

def kt(d1, d2, d3):
    c = cross(d1, d2)
    return norm(c) / norm(d1) ** 3, dot(c, d3) / dot(c, c)

def fd(f, t, h=1e-3):
    """Central differences for the first three derivatives."""
    p2, p1, m1, m2 = f(t + 2*h), f(t + h), f(t - h), f(t - 2*h)
    d1 = [(p1[i] - m1[i]) / (2*h) for i in range(3)]
    d2 = [(p1[i] - 2*f(t)[i] + m1[i]) / h**2 for i in range(3)]
    d3 = [(p2[i] - 2*p1[i] + 2*m1[i] - m2[i]) / (2*h**3) for i in range(3)]
    return d1, d2, d3

helix = lambda t: [2*math.cos(t), 2*math.sin(t), t]
cubic = lambda t: [t, t*t, t**3]
for t in (0.0, 1.0):
    ex = kt([-2*math.sin(t), 2*math.cos(t), 1], [-2*math.cos(t), -2*math.sin(t), 0], [2*math.sin(t), -2*math.cos(t), 0])
    nu = kt(*fd(helix, t))
    print(f"helix t={t}: exact k={ex[0]:.8f} tau={ex[1]:.8f} | differences k={nu[0]:.8f} tau={nu[1]:.8f}")
for t in (0.0, 0.5, 1.0):
    ex = kt([1, 2*t, 3*t*t], [0, 2, 6*t], [0, 0, 6])
    nu = kt(*fd(cubic, t))
    print(f"cubic t={t}: exact k={ex[0]:.8f} tau={ex[1]:.8f} | differences k={nu[0]:.8f} tau={nu[1]:.8f}")

# rebuild a curve from constant curvature 0.4 and torsion 0.2 (RK4 on the Frenet-Serret system)
k, tau = 0.4, 0.2
def deriv(y):
    a, T, N, B = y
    return [T, [k*x for x in N], add([-k*x for x in T], B, tau), [-tau*x for x in N]]
def step(y, h):
    def comb(y, d, c): return [add(y[i], d[i], c) for i in range(4)]
    k1 = deriv(y); k2 = deriv(comb(y, k1, h/2)); k3 = deriv(comb(y, k2, h/2)); k4 = deriv(comb(y, k3, h))
    return [[y[i][j] + h/6 * (k1[i][j] + 2*k2[i][j] + 2*k3[i][j] + k4[i][j]) for j in range(3)] for i in range(4)]
y = [[0, 0, 0], [1, 0, 0], [0, 1, 0], [0, 0, 1]]
h, pts = 0.01, [[0, 0, 0]]
for n in range(1, 1001):
    y = step(y, h)
    if n % 250 == 0: pts.append(y[0])
c = math.sqrt(5)
ref = [helix(s / c) for s in (0, 2.5, 5, 7.5, 10)]
print("rebuilt vs helix a=2, b=1 (pairwise distances):")
for i in range(1, 5):
    print(f"  |p0 p{i}| = {norm(sub(pts[i], pts[0])):.8f}   helix: {norm(sub(ref[i], ref[0])):.8f}")
T, N, B = y[1], y[2], y[3]
print(f"frame still orthonormal: T.N={dot(T, N):.1e}  |B|-1={norm(B) - 1:.1e}  B-TxN max={max(abs(x) for x in sub(B, cross(T, N))):.1e}")
Output
helix t=0.0: exact k=0.40000000 tau=0.20000000 | differences k=0.40000007 tau=0.20000002
helix t=1.0: exact k=0.40000000 tau=0.20000000 | differences k=0.40000007 tau=0.20000002
cubic t=0.0: exact k=2.00000000 tau=3.00000000 | differences k=2.00000000 tau=3.00000000
cubic t=0.5: exact k=0.95200474 tau=0.78688525 | differences k=0.95200372 tau=0.78688555
cubic t=1.0: exact k=0.16642354 tau=0.15789474 | differences k=0.16642340 tau=0.15789478
rebuilt vs helix a=2, b=1 (pairwise distances):
  |p0 p1| = 2.39799715   helix: 2.39799715
  |p0 p2| = 4.23534922   helix: 4.23534922
  |p0 p3| = 5.20288746   helix: 5.20288746
  |p0 p4| = 5.46841724   helix: 5.46841724
frame still orthonormal: T.N=-3.7e-16  |B|-1=-1.0e-14  B-TxN max=8.8e-14

The finite-difference values agree with the exact ones to about seven digits. The error here is the truncation error of central differences, proportional to \(h^2\), so a smaller step would help at first; but the third difference divides by \(h^3\), and with \(h = 10^{-5}\) rounding errors in the function values would be magnified by \(10^{15}\) and swamp the answer. Torsion, which needs three derivatives, is always the most delicate quantity to compute from data. The twisted cubic has curvature 2 and torsion 3 at the origin, decaying as the curve straightens out. In the second part, the rebuilt curve and the helix with \(a = 2\), \(b = 1\) (whose \(\kappa = 2/5\) and \(\tau = 1/5\)) have the same pairwise distances to eight digits, which is exactly what the uniqueness theorem predicts: congruent curves, positioned differently in space.

Common mistakes

  • MistakeComputing curvature as \(|\alpha''(t)|\) for a curve that is not unit speed.

    InsteadWith a general parameter use \(\kappa = |\alpha' \times \alpha''|/|\alpha'|^3\); acceleration includes speeding up and slowing down.

  • MistakeDefining the principal normal at points where \(\kappa = 0\).

    Instead\(N = T'/\kappa\) requires \(\kappa > 0\); at inflection points of a space curve the frame can jump.

  • MistakeMixing torsion sign conventions between books.

    InsteadWith \(B' = -\tau N\) a right-handed helix has \(\tau > 0\); with \(B' = \tau N\) the signs flip. Check the convention before comparing answers.

  • MistakeThinking torsion measures bending.

    InsteadCurvature measures turning within the osculating plane; torsion measures how fast that plane rotates about the tangent.

  • MistakeExpecting curvature alone to determine a space curve.

    InsteadA circle and a helix can share the same constant \(\kappa\); torsion is needed too. For plane curves, signed curvature suffices.

Summary and key terms

  • For a unit-speed curve, \(\kappa = |\alpha''|\); it is zero exactly for lines and equals \(1/r\) for a circle of radius \(r\).
  • The osculating circle has radius \(1/\kappa\) and agrees with the curve to second order.
  • Plane curves have signed curvature \(k = \theta'\), the rate of turning of the tangent angle.
  • The Frenet–Serret equations: \(T' = \kappa N\), \(N' = -\kappa T + \tau B\), \(B' = -\tau N\).
  • For any regular parameter, \(\kappa = |\alpha' \times \alpha''|/|\alpha'|^3\) and \(\tau = (\alpha' \times \alpha'') \cdot \alpha'''/|\alpha' \times \alpha''|^2\).
  • A curve is planar if and only if \(\tau \equiv 0\); curvature and torsion determine a curve up to a rigid motion.
curvature
The rate at which the unit tangent turns with respect to arc length.
principal normal
The unit vector in the direction of the derivative of the unit tangent.
binormal
The cross product of the unit tangent and the principal normal.
torsion
The rate at which the osculating plane rotates, defined by the derivative of the binormal.
osculating circle
The circle that best approximates a curve at a point, with radius equal to the reciprocal of the curvature.
Frenet–Serret frame
The moving orthonormal frame of tangent, normal and binormal along a space curve.

Practice problems

Work each problem on paper first, then reveal the answer to check.

  1. Find the curvature of the ellipse \((a\cos t, b\sin t)\) and its maximum and minimum.

    Show answer

    \(\kappa = ab/(a^2\sin^2 t + b^2\cos^2 t)^{3/2}\). For \(a > b\) the maximum \(a/b^2\) is at the ends of the major axis and the minimum \(b/a^2\) at the ends of the minor axis.

  2. Compute \(\kappa\) and \(\tau\) of the twisted cubic \((t, t^2, t^3)\) at \(t = 0\).

    Show answer

    \(\alpha' = (1, 0, 0)\), \(\alpha'' = (0, 2, 0)\), \(\alpha''' = (0, 0, 6)\); \(\alpha' \times \alpha'' = (0, 0, 2)\), so \(\kappa = 2\) and \(\tau = 12/4 = 3\).

  3. Show that if all normal lines of a curve pass through a fixed point, the curve lies on a circle.

    Show answer

    Let the point be the origin, so \(\alpha + \lambda N = 0\). Differentiating and using Frenet–Serret, the \(T\) and \(B\) components give \(\lambda\kappa = 1\) and \(\lambda\tau = 0\), so \(\kappa\) is constant, \(\tau = 0\), and \(|\alpha| = 1/\kappa\).

  4. Find a helix with \(\kappa = 1\) and \(\tau = 1\).

    Show answer

    \(a = \kappa/(\kappa^2 + \tau^2) = 1/2\) and \(b = \tau/(\kappa^2 + \tau^2) = 1/2\): the helix \((\frac12\cos t, \frac12\sin t, \frac12 t)\).

  5. Prove the Darboux vector \(\omega = \tau T + \kappa B\) satisfies \(T' = \omega \times T\), \(N' = \omega \times N\), \(B' = \omega \times B\).

    Show answer

    \(\omega \times T = \kappa B \times T = \kappa N\); \(\omega \times N = \tau T \times N + \kappa B \times N = \tau B - \kappa T\); \(\omega \times B = \tau T \times B = -\tau N\). The frame rotates with angular velocity \(\omega\).

  6. Use the graph formula to find where \(y = x^3\) has maximum curvature for \(x > 0\).

    Show answer

    \(\kappa = 6x/(1 + 9x^4)^{3/2}\). Setting the derivative to zero gives \(1 + 9x^4 = 54x^4\), so \(x = 45^{-1/4} \approx 0.386\), with \(\kappa \approx 1.76\).

Lesson quiz · 5 questions

Score 60% or more to complete this lesson.

Take the quiz