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:
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
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 center \(\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\).
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
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
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:
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
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
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
- \(\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\).
- \(\alpha' \times \alpha'' = (ab\sin t, -ab\cos t, a^2)\), with length \(a\sqrt{b^2 + a^2} = ac\).
- So \(\kappa = ac/c^3 = a/(a^2 + b^2)\).
- \((\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)\).
- \(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\).
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
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.
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}")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.
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.
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\).
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\).
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)\).
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\).
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.
Create a free account to save your progress, take quizzes and earn a certificate.