A curve is a function of one number
A parametric curve does not describe y as a function of x. Instead a single parameter t, usually running from 0 to 1, is fed into a vector-valued function P(t) that returns a point. Move t from 0 to 1 and the point traces the curve. This one trick sidesteps every problem that plagues y = f(x): the curve can loop back on itself, be vertical, or even cross itself, because x(t) and y(t) are independent functions of the same t.
Nearly every curve used in computer graphics is a weighted sum of control points: P(t) = Σ Bi(t)·Pi, where the Pi are a handful of points you can drag on screen and the Bi(t) are fixed blending functions that decide how much influence each point has at parameter t. Bézier curves, B-splines and NURBS are really just three different choices of blending function.
Bézier curves and the de Casteljau algorithm
A Bézier curve of degree n is built from n+1 control points using the Bernstein polynomials as blending functions. In practice nobody evaluates the Bernstein formula directly — Paul de Casteljau's 1959 algorithm computes the same point by repeated linear interpolation, which is numerically stable and trivial to code:
function deCasteljau(points, t):
pts = points.slice()
while pts.length > 1:
next = []
for i in 0..pts.length-2:
next.push(lerp(pts[i], pts[i+1], t))
pts = next
return pts[0] // the point on the curve at parameter t
Each pass of the loop draws a shorter chain of lerped segments; the very last point is on the curve, and the intermediate points trace the same scaffold Bézier used to define the construction geometrically, decades before anyone had a computer to animate it.
From Bézier to B-splines: local control
A single Bézier curve has two weaknesses. First, every control point influences the entire curve — drag one point and the whole shape ripples, which makes fine editing frustrating. Second, a high-degree Bézier curve (many control points forced into one polynomial) tends to wobble between its points, a version of Runge's phenomenon.
A B-spline fixes both problems by stitching together several low-degree polynomial pieces instead of forcing one high-degree polynomial through everything. A knot vector marks where one piece ends and the next begins, and each control point's blending function is a smooth bump that is zero outside a small window of knots — so moving a point only reshapes the curve locally. A cubic B-spline is the default in most CAD and animation software for exactly this reason: predictable, local edits.
NURBS: giving control points a weight
A B-spline is still a polynomial, and polynomials cannot represent a circle or an ellipse exactly — a Bézier "circle" is always an approximation. NURBS (Non-Uniform Rational B-Splines) fix this by giving every control point an extra number, a weight wi, and dividing by the sum of the weighted blending functions instead of just summing them:
C(t) = ( Σ Ni,p(t)·wi·Pi ) / ( Σ Ni,p(t)·wi )
Pulling a weight up drags the curve toward that control point without moving it; pushing it toward zero pushes the curve away. With the right weight pattern (a chain of quarter-circle arcs uses weights alternating between 1 and √2⁄2) a NURBS curve traces a mathematically exact circle, which is why every serious CAD kernel — the geometry underneath cars, aircraft and turbine blades — is built on NURBS rather than plain splines.
Where you have already used these
TrueType fonts store glyph outlines as quadratic Bézier curves; PostScript, OpenType-CFF, PDF and SVG's path data use cubic ones. Adobe Illustrator's pen tool, Figma's vector tool and every "bezier handle" you have dragged in a design app is exactly the de Casteljau construction above, rendered in reverse — you place the anchors and handles, the software solves for the curve. CAD packages like SolidWorks, Rhino and Fusion 360 use NURBS for both curves and surfaces, since the same rational-weight trick that draws an exact circle also builds exact cylinders and spheres in 3D.
Frequently asked questions
Why do fonts use quadratic Bézier curves but vector illustration tools use cubic ones?
It is a storage-versus-expressiveness trade. TrueType fonts use quadratic curves because two control points per segment is compact and glyph outlines are simple; PostScript, OpenType-CFF and SVG use cubic Bézier curves because a cubic can hold an inflection point and an S-shape in a single segment, needing fewer segments for complex artwork.
Can a Bézier curve draw a perfect circle?
No — a Bézier curve is a polynomial and a circle is not, so any Bézier circle is an approximation (a very good one uses a magic constant of about 0.5523 for the control-point offset). A NURBS curve can draw an exact circle because its rational weights let it represent conic sections precisely.
What is the practical difference between a B-spline and a Bézier curve?
A single Bézier curve is one polynomial piece controlled by all of its points at once, so moving one point can reshape the whole curve. A B-spline is stitched from several lower-degree polynomial pieces joined at knots, and each control point only influences a local window — moving it reshapes just that neighbourhood.
Try it live
Everything above runs in your browser — open Bézier, B-Spline & NURBS and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.
▶ Open Bézier, B-Spline & NURBS simulation