Strictly speaking, a Bézier Curve can have any number of control points and is defined by the formula:

        N           N!     k      1-k
B(u) = sum P(k) --------- u *(1-u)
       k=0      k!*(N-k)!
Where N is the number of the last point, P(k) is point #k, and u is the distance along the curve, where u=0 is the beginning = P(0) and u=1 is the end = P(N).

This can be simplified to:

  • One point:
    B(u) = P(0)
    
  • Two points:
    B(u) = P(0) * (1-u) + P(1) * u
         = P(0) + u * (P(1) - P(0))
    
  • Three points:
                       2                              2
    B(u) = P(0) * (1-u)  + P(1) * 2*u*(1-u) + P(2) * u
                                  2                    2         2
         = P(0) - 2*P(0)u +  P(0)u  + 2*P(1)u - 2*P(1)u  +  P(2)u
                                    2
         = P(0) + u*2*(P(1)-P(0) + u *(P(2)-2*P(1)+P(0))
    
  • Four points:
                       3                   2             2                 3
    B(u) = P(0) * (1-u)  + P(1) * 3*u*(1-u)  + P(2) * 3*u *(1-u) + P(3) * u
    
    which is equivalent to what Monolith has given above.

As you get more control points, the polynomial produced is of a higher degree, so in most cases four control points are used. The curve is tangent to the line formed between each pair of end points (ie, P(0) & P(1) and P(N-1) & P(N)), so curves can be easily fit together smoothly.

Windows can draw 4-point bezier curves through the GDI functions PolyBezier (which takes a start point and three additional control points per curve), PolyBezierTo (which uses the current position as the first control point and takes three more per curve), and PolyDraw (which can be used to draw lines and bezier curves in one call).

Formula is from http://astronomy.swin.edu.au/pbourke/curves/bezier/