예제 #1
0
void drawRosette(Turtle& turtle, double size, int squares) {
    double angle = 360.0 / squares;
    for (int i = 0; i < squares; i++) {
        for (int j = 0; j < 4; j++) {
            turtle.forward(size);
            turtle.right(90);
        }
        turtle.right(angle);
    }
}
예제 #2
0
// Use Koch fractal to draw a "snowflake"
void kochSnowflake(Turtle& turtle, int level, double size) {
    double angle = 60;
    turtle.left(angle);
    koch(turtle, level, size, angle);
    turtle.right(angle);
    turtle.right(angle);
    koch(turtle, level, size, angle);
    turtle.right(angle);
    turtle.right(angle);
    koch(turtle, level, size, angle);
}
예제 #3
0
void drawSpiral(Turtle& turtle, double size) {
    while (size < 1.25) {
        turtle.forward(size);
        turtle.right(15);
        size = size * 1.02;
    }
}
예제 #4
0
void drawStar(Turtle& turtle, double size, int sides) {
    for (int i = 0; i < sides; i++) {
        turtle.forward(size);
        turtle.right(360.0 / sides);
        turtle.forward(size);
        turtle.left(2 * 360.0 / sides);
    }
}
예제 #5
0
// Recursive Koch fractal
void koch(Turtle& turtle, int level, double size, double angle) {
    if (level == 0) {
        turtle.forward(size);
    } else {
        koch(turtle, level - 1, size, angle);
        turtle.left(angle);
        koch(turtle, level - 1, size, angle);
        turtle.right(angle);
        turtle.right(angle);
        koch(turtle, level - 1, size, angle);
        turtle.left(angle);
        koch(turtle, level - 1, size, angle);
    }
}
예제 #6
0
// Recursive fractal "tree" structure
void tree(Turtle& turtle, int level, double size, double angle,
        double scale) {
    if (level == 0) {
        turtle.forward(size);
        turtle.backward(size);
    } else {
        turtle.forward(size);
        turtle.left(angle);
        tree(turtle, level - 1, size * scale, angle, scale);
        turtle.right(angle);
        turtle.right(angle);
        tree(turtle, level - 1, size * scale, angle, scale);
        turtle.left(angle);
        turtle.backward(size);
    }
}
예제 #7
0
/**
    The main function begins execution of the program.
*/
int ccc_win_main() {
    Turtle myrtle;
    double size = 3;

    myrtle.moveTo(5 - size / 2, -9); // bottom of drawing area
    myrtle.setHeading(90);
    for (int i = 3; i < 10; i++) {
        drawPolygon(myrtle, size, i);
    }

    myrtle.moveTo(-4 + size / 2, 1);
    myrtle.setHeading(-18);
    drawStar(myrtle, size, 5);

    myrtle.moveTo(-5, -5); // center of drawing area
    myrtle.setHeading(0);
    drawRosette(myrtle, size, 40);

    myrtle.moveTo(5, 5); // center of drawing area
    myrtle.setHeading(90);
    drawSpiral(myrtle, .01);

    usleep(2000000);
    cwin.clear();
    myrtle.moveTo(0, -9); // start of drawing area
    myrtle.setHeading(0);
    tree(myrtle, 10, 7, 60, .6);

    usleep(2000000);
    cwin.clear();
    myrtle.moveTo(-9, -9); // start of drawing area
    myrtle.setHeading(90);
    koch(myrtle, 5, .25, 80);

    usleep(2000000);
    cwin.clear();
    myrtle.moveTo(4, -8); // start of drawing area
    myrtle.setHeading(0);
    kochSnowflake(myrtle, 5, .05);

    myrtle.sleep(2000);
    myrtle.clear();
    string input = myrtle.getString("Enter a message: ");
    int num1 = myrtle.getInt("Enter an integer number: ");
    double num2 = myrtle.getDouble("Enter a double number: ");
    myrtle.moveTo("Click mouse to display the message");
    myrtle.print(input);
    myrtle.moveTo("Click mouse to display the integer number");
    myrtle.print(num1);
    myrtle.moveTo("Click mouse to display the double number");
    myrtle.print(num2);
    myrtle.moveTo("Click mouse to display a square");
    myrtle.setHeading(0);
    myrtle.right(90);
    myrtle.forward(5);
    myrtle.right(90);
    myrtle.forward(5);
    myrtle.right(90);
    myrtle.forward(5);
    myrtle.right(90);
    myrtle.forward(5);
}
예제 #8
0
int ccc_win_main() {
    Turtle t;
    bool running = true;
    while (running == true) {
        double sides = -1;
        while (sides < 1)   {
            sides = t.getInt("Enter number of sides:");
        }
        double length = t.getDouble("Enter length of sides:");

        if (sides > 1) {
            int degrees = DEGREES_IN_CIRCLE / sides;
            t.setHeading(LEFT);
            
            /* 
            Apothem is the distance of the normal of any side of the polygon
            to the centerpoint of the polygon. The following code will
            center the shape in the window.
            */
            double apothem = length / (2 * tan(PI / sides)); 
            t.moveTo(length / 2, -apothem);
            
            int i = 0;
            while (i < sides) {
                t.forward(length);
                t.right(degrees);
                i++;
            }
        }
        if (sides == 1) {
            t.setHeading(0);
            // Creates the upper case letter M.
            t.moveTo(NTHREE,NNINE);
            t.right(TEN);
            t.forward(FORWARD_INC);
            t.right(G_TURN2);
            t.forward(FORWARD_INC);
            t.left(G_TURN2);
            t.forward(FORWARD_INC);
            t.right(G_TURN2);
            t.forward(FORWARD_INC);   

            // Creates the upper case letter G.
            t.moveTo(SEVEN_POINT_FIVE, N_ONE_POINT_FIVE);
            t.left(G_TURN);
            t.forward(2);
            t.backward(2);
            t.right(ONE_THIRTY);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(G_TURN);
            t.forward(2);
            t.left(SMALL_TURN);
            t.forward(1);
            t.left(SMALL_TURN);
            t.forward(1);
            t.left(SMALL_TURN);
            t.forward(1);
            t.left(SMALL_TURN);
            t.forward(1);
            t.backward(2);

            // Creates the upper case letter J.
            t.setHeading(RIGHT_TURN);
            t.moveTo(NSEVEN, FIVE);
            t.forward(2);
            t.right(STRAIGHT);
            t.forward(1);
            t.left(RIGHT_TURN);
            t.forward(2);
            t.right(RIGHT_TURN);
            t.forward(1);

            // Creates the upper case letter W.
            t.moveTo(-FOUR, FIVE);
            t.right(TWO_THIRTY);
            t.forward(W_INC);
            t.left(RIGHT_TURN);
            t.forward(2);
            t.right(RIGHT_TURN);
            t.forward(2);
            t.left(RIGHT_TURN);
            t.forward(W_INC);

            // Creates the upper case letter C.
            t.moveTo(FOUR, FIVE);
            t.right(C_TURN);
            t.forward(2);
            t.right(STRAIGHT);
            t.forward(2);
            t.left(RIGHT_TURN);
            t.forward(2);
            t.left(RIGHT_TURN);
            t.forward(2);
        }

        string repeat = t.getString("Do you wish to continue (y/n)? ");
        if (repeat != "y") running = false;
        else t.clear();
    }

    cout << "Exiting Program.\n";

    exit(0);
    return 0;

}