The purpose of this exercise is to create an image like the example below:
You will need to do the following:
- Copy the code in the usage to your
Main.java
You'll define the logic for creating and working with shapes in the geometrical_shapes package. Create the following interfaces:
-
Drawable which contains the methods draw and getColor.
-
Displayable which contains the methods display and save.
Define them according to the way they are called in the Main.java function.
In order to compile and run Main.java, you'll need to define some classes. You are free to implement all the shapes with whatever internal structure you see fit, but you must provide a constructor for all the shapes, which will be described below:
Point: a new point should be created from two int values.Line: a new line should be created from references to two different points.Triangle: a new triangle should be created from references to three different points.Rectangle: a new rectangle should be created from references to two different points.Circle: a new circle should be created from a reference to a point representing the center, and an int value representing the circle's radius.
You'll also need to create the random method for Line, Point, and Circle. You should derive their signatures from the usage.
You may optionally implement the following shapes, including the classes and interfaces needed to draw them:
- Pentagon
- Cube
interface Displayable {
void display(int x, int y, Color color);
void save(String string);
}
interface Drawable {
void draw(Displayable displayable);
Color getColor();
}
public class Main {
public static void main(String[] args) {
Image image = new Image(1000, 1000);
Rectangle rectangle = new Rectangle(new Point(50, 50), new Point(300, 200));
rectangle.draw(image);
Triangle triangle = new Triangle(new Point(100, 100), new Point(900, 900), new Point(100, 900));
triangle.draw(image);
for (int i = 0; i < 50; i++) {
Circle circle = Circle.random(image.getWidth(), image.getHeight());
circle.draw(image);
}
image.save("image.png");
}
}