There are many forms of numerical approximation, and even more names for the different methods. Depending on how they are used, they are often called by a different name if certain parameters are different. For a recent implementation in a network game, I’ve had to become very familiar with these concepts.
For example a Parametric Free (or Natural) Cubic Spline, is in fact, the Cubic Bézier Curve when defined in terms of Parametric coordinates ( e.g. where you interpolate the dependent variables x, y on t.)
Generally, a free cubic spline is defined as
y = S(x) = ax3 + bx2 + cx + d
However, when you parameterize S(x) with respect to [wrt] time, x = x(t), y = y(t), you get the Cubic Bézier curve.
x(t) = at3 + bt2 + ct + d
y(t) = et3 + ft2 + gt + h
(let t = 0, and then d,h simply become d = x0 and h = y0 )
A really nice explanation of the derivation of a-f is presented at:
http://www.tinaja.com/glib/fastbez.pdf
Since general cubic splines always go through their end-points, the Cubic Bézier curve must also go through all of the end-points wrt to time t. This is where in the confusion lies as to whether or not the spline goes through all the points. It definately goes through all the end-points, but whether or not you define your “control points” to equal your end-points is up to you.
Since you generally use cubic splines to piece-wise approximate an extended curve between multiple fixed/known/measured points, I call all these piece-wise fixed end-points the control points. However, when defining the Cubic Bézier, you must approximate (or choose from your control points) two inner points between each of the end-points. The Cubic Bézier curve will not pass through these inner points. Some people call these inner points also “control points”, in which case the curve will not pass through all the control points. Thus, it’s a matter of perspective.
I personally believe that if the two inner points are an approximation (e.g. non-end-points), it’s unfair to call them control points because they are not guaranteed accurate (e.g. not measured). But if you select some of your end-points as your inner points (e.g now guaranteed accurate), beware the curve will not pass through them, even though you know it should! A real catch-22.
A little bit more explanation can be found at http://groups.google.com/group/comp.graphics.algorithms/msg/7276de840df9614c?hl=en&fwc=1
A sample implementation in C is on Wikipedia: http://en.wikipedia.org/wiki/B%C3%A9zier_curve
An alternate approach is to use the standard 2D Cubic Spline interpolation on an XY plane, fixing x and y wrt to t. If you do this, you can use the example in “Numerical recipies in C” at http://www.library.cornell.edu/nr/bookcpdf/c3-3.pdf to create a Cubic Spline in each dimension (x(t), y(t)). E.g. Instead of fixing x and interpolating for y, fix t and interpolate for x, then keeping the same fixed t interpolate for y.