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);