All we need is code to render one type of spline!
I choose to use the Bezier spline because its' convexity property allows me to write a simple recursive
algorithm:
public void spline(ControlPoint p0,
ControlPoint p1,
ControlPoint p2,
ControlPoint p3, int pix) {
float len = ControlPoint.dist(p0,p1)
+ ControlPoint.dist(p1,p2)
+ ControlPoint.dist(p2,p3);
float chord = ControlPoint.dist(p0,p3);
if (Math.abs(len - chord) < 0.25f) return;
fatPixel(pix, p0.x, p0.y);
ControlPoint p11 = ControlPoint.midpoint(p0, p1);
ControlPoint tmp = ControlPoint.midpoint(p1, p2);
ControlPoint p12 = ControlPoint.midpoint(p11, tmp);
ControlPoint p22 = ControlPoint.midpoint(p2, p3);
ControlPoint p21 = ControlPoint.midpoint(p22, tmp);
ControlPoint p20 = ControlPoint.midpoint(p12, p21);
spline(p20, p12, p11, p0, pix);
spline(p3, p22, p21, p20, pix);
}