Beispiel #1
0
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;
}
Beispiel #2
0
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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);
}
Beispiel #5
0
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);
}
Beispiel #6
0
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);
	}
}
Beispiel #7
0
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;
    }
}