Rasterizing Code

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);
    }
Lecture 9 Slide 29 6.837 Fall '98