CSE1030 Lab 04

Week of Feb 03
Due: Mon Feb 10 before 11:59PM

Introduction

The purpose of this lab is to implement a class that uses aggregation and composition. This lab also introduces the concept of recursion and uses your implemented class in a recursive method to draw a version of the Koch snowflake.

Question 1: Implement a turtle class

Turtle graphics is a method for drawing geometric primitives (such as points, lines, and curves) in the Cartesian (xy) plane. Logo was one of the early computer languages designed for educational purposes, and it had turtle graphics as one of its main features.

In turtle graphics, the client has control of a cursor (the turtle) that responds to commands such as "move forward 1.5 units", "turn right", "turn left", and "turn 45 degrees". As the turtle moves, it leaves behind a trail using a pen; the pen can have attributes such as colour and radius to control the trail colour and thickness.

The turtle needs attributes to represent its position in the plane, the direction that it is facing, and the pen color. The position can be represented using a `Vector2D` object, and the direction can be represented as an angle greater than -360.0 and less than 360.0 degrees (measured counterclockwise from the positive x axis). The pen color is represented using a `java.awt.Color` object. Your class should use composition to manage the `Vector2D` object and aggregation to manage the `java.awt.Color` object.

Implement a `Turtle` class that supports turtle graphics. Use the code shown below to start your program. The code below uses the `StdDraw` class from the textbook Introduction to Programming in Java: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne. `StdDraw` provides the capability to easily create simple drawings in a Java program. `StdDraw` uses an Cartesian coordinate system with the bottom left corner of the window having coordinates (0.0, 0.0) and the top right corner of the window having coordinates (1.0, 1.0).

For the `move` method, you may find the methods `Vector2D.dirVector` and `Turtle.maxDistance` to be useful in your implementation.

In the `move` method, you need to draw a line using the turtle's pen color. To draw a line from a point `(x1, y1)` to a point `(x2, y2)` using the turtle's current pen color, use the following code:

```StdDraw.setPenColor(this.penColor);
StdDraw.line(x1, y1, x2, y2);
```

Submit

Submit your work using the following command in the directory where your `Turtle.java` file is saved.

```submit 1030 L4 Turtle.java
```

or use the web-based submit https://webapp.eecs.yorku.ca/submit/