rendered paste bodyvoid 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);