Curvature Beziers — Acko.net
Hackery, Math & Design
Steven Wittens i
August 16, 2026
Curvature Beziers
Improving on a timeless recipe
The bezier curve is a staple of CAD and computer graphics. Like Bic pens, the design is decades old and they're everywhere. You'll often find them as the default or only choice in various illustration and animation tools.
Conceived by Paul de Casteljau in 1959, and refined by Pierre Bézier in the 1960s at Renault, the enduring appeal of the bezier curve lies in its simplicity. While more sophisticated curves have been invented, and<br>new ones continue to be proposed, these are limited to specific domains, like high-precision CAD or road design. In general use, the bezier stubbornly refuses to be dethroned, despite its shortcomings.
Hence bezier curves are a piece of legacy tech we appear to be stuck with. As a software engineer, my question then is: can we make beziers better without invalidating all the tech built on and with them?
The answer is yes.
Source
Lerp-a-derp
Drawing a bezier curve is a surprisingly simple and linear process:
Tip: All the diagrams in this post are fully interactive.
Given a series of control points, we connect them with lines. We then run along those lines simultaneously, to produce new points, which can be connected again. This process is repeated until we are left with a single point, which lies on the curve.
This construction makes beziers far more regular than they might first appear.
The linear interpolations (aka lerps) can be summarized into a single compact formula, e.g. for 4 control points $ \left(A, B, C, D\right) $:
$$ \gamma \left( t \right) = A \cdot \left(1 - t\right)^3 + B \cdot 3 \left(1 - t\right)^2 t + C \cdot 3 \left(1 - t\right) t^2 + D \cdot t^3 $$
The rule is simple: descending powers of $\left(1 - t\right)$, ascending powers of $t$, with coefficients taken from the n'th row of Pascal's triangle:
$$<br>\begin{array}{ccccccccccccc}<br>&&&&&& 1 \\<br>&&&&& 1 && 1 \\<br>&&&& 1 && 2 && 1 \\<br>&&& 1 && 3 && 3 && 1 \\<br>&& 1 && 4 && 6 && 4 && 1 \\<br>&1 && 5 && 10 && 10 && 5 && 1 \\<br>... &&&&&& ... &&&&&& ... \\<br>\end{array}<br>$$
For curves in 2D and 3D, the formula is applied to the individual X, Y or Z coordinates.
While beziers can be constructed for any number of control points, the common practice is to only use cubic beziers with 4 control points. This is because the curve is only guaranteed to cross through the first and last control point, which makes higher degree beziers more difficult to shape.
Larger curves are instead constructed by joining together multiple cubic bezier segments, with the tangents lined up to create a segmented curve that appears smooth:
This is the cubic bezier spline, as commonly understood. The precision "pen tool" in most drawing apps then consists of drawing and editing the control points, rather than drawing curves directly.
A Lie Told Everywhere
Pen tools typically have a few different modes for the control points:
Intuitively these represent various degrees of smoothness. Symmetric tangents are offered as the smoothest option, with some qualities of smoothness being lost as you relax the constraints.
In reality this is completely wrong , and this is easy to demonstrate.
Bezier curves can be split exactly, by reading off the new control points from the interpolation diagram:
The left and right segments are 100% identical to the original curve, and always join up perfectly at the seam. Yet the tangents in the middle will be asymmetric except for one split near the middle. This can be confirmed using a curvature comb which represents the (inverse) radius of curvature at every point:
The curvature comb remains continuous, with no jumps.
This means that whether or not adjacent tangents are of equal length, i.e. symmetric, is completely irrelevant. Attempting to draw smooth and intuitive bezier curves this way is a fool's errand.
A simple way to improve this is to treat the tangents as relative rather than absolute. e.g. We can make them proportional to the distance between the start and end of each segment:
This spline is easier to edit, because as you move each curve point around, the adjacent segments naturally flex to get out of the way. There are far fewer cusps created this way. Editing the tangents remains the same.
However if we plot curvature again, we can tell this isn't a great solution:
Scaling tangents proportionally doesn't guarantee that curvature is preserved, nor does curvature remain continuous from one segment to the next.
This also shows that offering users a curvature comb visualization as a "helpful tool" is really quite mean: adjusting the curvature on one end will also affect the other side, requiring repeated adjustments back and forth until it's close enough.
Handle Carefully
A much more effective strategy is to work with curvature directly.
While this is a difficult problem in general, it turns out there are some surprising relationships here, which we can...