int main() { int k, i, p, q, dx, dy, dx1, dy1; static char fold[1 << ORDER]; gr_on(); gr_window(0, 0, 640, 400, 1, 0); move(200, 140); dx = 0; dy = 2; draw_rel(3 * dx, 3 * dy); p = 0; for (k = 1; k <= ORDER; k++) { fold[p] = LEFT; q = 2 * p; for (i = p; i <= q; i++) { switch (fold[q - i]) { case RIGHT: fold[i] = LEFT; dx1 = -dy; dy1 = dx; break; case LEFT: fold[i] = RIGHT; dx1 = dy; dy1 = -dx; break; } draw_rel(dx + dx1, dy + dy1); draw_rel(3 * dx1, 3 * dy1); dx = dx1; dy = dy1; } p = q + 1; } hitanykey(); return EXIT_SUCCESS; }
void rul(int i) /* right-up-left */ { if (i == 0) return; urd(i - 1); draw_rel( h, 0); rul(i - 1); draw_rel( 0, h); rul(i - 1); draw_rel(-h, 0); dlu(i - 1); }
void urd(int i) /* up-right-down */ { if (i == 0) return; rul(i - 1); draw_rel( 0, h); urd(i - 1); draw_rel( h, 0); urd(i - 1); draw_rel( 0, -h); ldr(i - 1); }
void ldr(int i) /* left-down-right */ { if (i == 0) return; dlu(i - 1); draw_rel(-h, 0); ldr(i - 1); draw_rel( 0, -h); ldr(i - 1); draw_rel( h, 0); urd(i - 1); }
void dlu(int i) /* down-left-up */ { if (i == 0) return; ldr(i - 1); draw_rel( 0, -h); dlu(i - 1); draw_rel(-h, 0); dlu(i - 1); draw_rel( 0, h); rul(i - 1); }
void Ccurve::run(int i, double dx, double dy) { if (i == 0) draw_rel(dx, dy); else { run(i - 1, (dx + dy) / 2, (dy - dx) / 2); run(i - 1, (dx - dy) / 2, (dy + dx) / 2); } }
void koch(void) { if (d <= DMAX) draw_rel(d * costbl[a % 6], d * sintbl[a % 6]); else { d /= 3; koch(); a++; koch(); a += 4; koch(); a++; koch(); d *= 3; } }