All pastes #420066 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-01 20:43 UTC
rendered paste body
void koch_curve_logo(GLfloat *a, GLfloat *b, int n) {

        GLfloat *k, *l, *m, *perp;
        GLfloat len;
        len = sqrt(pow(a[X] - b[X], 2) + pow(a[Y]-b[Y],2));
        GLfloat seg_len = len / 3.0;


        //glprintf(0.0, 0.0, "len: %04f", len);

        k = (GLfloat *)malloc(sizeof(GLfloat) * 2);
        l = (GLfloat *)malloc(sizeof(GLfloat) * 2);
        m = (GLfloat *)malloc(sizeof(GLfloat) * 2);
        perp = (GLfloat *)malloc(sizeof(GLfloat) * 2);

        if (n == 0) {
                glBegin(GL_LINES);
                        glVertex2f(a[X], a[Y]);
                        glVertex2f(b[X], b[Y]);
                glEnd();
        }
        else if (n > 0) {
                k[X] = a[X] + ((b[X] - a[X]) / 3.0);
                k[Y] = a[Y] + ((b[Y] - a[Y]) / 3.0);

                GLfloat mag, mid[2];
                mid[X] = a[X] + (b[X] - a[X]) / 2.0;
                mid[Y] = a[Y] + (b[Y] - a[Y]) / 2.0;


                perp[X] = -(b[Y] - a[Y]);
                perp[Y] = (b[X] - a[X]);

                l[X] = perp[X] * seg_len;
                l[Y] = perp[Y] * seg_len;

                m[X] = a[X] + ((b[X] - a[X]) / 3.0 * 2.0);
                m[Y] = a[Y] + ((b[Y] - a[Y]) / 3.0 * 2.0);

                glColor3f(1.0, 0.0, 0.0);
                koch_curve_logo(a,k,n-1);
                glColor3f(0.0, 1.0, 0.0);
                koch_curve_logo(k,l,n-1);
                koch_curve_logo(l,m,n-1);
                glColor3f(0.0, 0.0, 1.0);
                koch_curve_logo(m,b,n-1);


        }
        free(k);
        free(l);
        free(m);
        free(perp);
}





                koch_curve_logo(x[0], x[2], 2);
                koch_curve_logo(x[2], x[1], 1);
                koch_curve_logo(x[1], x[0], 1);