COMP2396 Object-oriented Programming and Java Assignment 1 Solved

35.00 $

Category:

Description

5/5 - (3 votes)

Overview

This assignment tests your understanding of classes and objects, and their implementations in Java. You are required to implement 4 classes, namely Shape, Square, Triangle and Circle. The Square class, Triangle class and Circle class are used to model squares, triangles, and circles, respectively. They are subclasses of the Shape class which provides an abstraction of general shapes. For each of the 4 classes mentioned above, you are required to design and implement a tester class to test the correctness of your implementation. You are also required to write Javadoc for all public classes and their public class members. Specifications

The Shape class

The Shape class is used to model general shapes. It has instance variables for storing color, fill-type, orientation, screen coordinates of the center, and local coordinates of the vertices of a shape. It has methods for getting the screen coordinates of the vertices of a shape. Below is a detailed description for the Shape class.

Specification of the Shape class:

instance variables

Color color – a Color object specifying the color of the shape. To use the Color class, place “import java.awt.Color;” at the top of the source file of your Shape class. Please refer to http://docs.oracle.com/javase/8/docs/api/java/awt/Color.html for details of the Color class. boolean filled – a boolean value specifying whether the shape is filled or not filled.

double theta – a double value specifying the orientation (in radians) of the shape in the screen coordinate system (see Figure 1).

double xc – a double value specifying the x-coordinate of the center of the shape in the screen coordinate system.

double yc – a double value specifying the y-coordinate of the center of the shape in the screen coordinate system.

double[] xLocal – an array of double values specifying the x-coordinates of the vertices (in counter clock-wise order) of the shape in its local coordinate system.

double[] yLocal – an array of double values specifying the y-coordinates of the vertices (in counter clock-wise order) of the shape in its local coordinate system. methods:

void setVertices(double d) – a method for setting the local coordinates of the vertices of a shape. This is a dummy method and is supposed to be overridden in the subclasses.

void translate(double dx, double dy) – a method for translating the center of the shape by dx and dy, respectively, along the x and y directions of the screen coordinate system (i.e., dx and dy should be added to xc and yc respectively).

void rotate(double dt) – a method for rotating the shape about its center by an angle of dt (in radians) (i.e., dt should be added to theta).

int[] getX() – a method for retrieving the x-coordinates of the vertices (in counter clock-wise order) of the shape in the screen coordinate system (rounded to nearest integers).

int[] getY() – a method for retrieving the y-coordinates of the vertices (in counter clock-wise order) of the shape in the screen coordinate system (rounded to nearest integers).

  • You should make all the instance variables and methods public by using the public access modifiers.

 

Figure 1. Relationship between local and screen coordinates of the vertices of a shape.

The screen coordinates of the vertices can be computed from the local coordinates of the vertices based on the orientation and center of the shape using the following formula:

𝑥= 𝑥 cos 𝜃 − 𝑦 sin 𝜃 + 𝑥𝑐           𝑦= 𝑥 sin 𝜃 + 𝑦 cos 𝜃 + 𝑦𝑐

where (x, y) and (x’, y’) denote the local and screen coordinates of a vertex, respectively, 𝜃 the orientation (in radians) of the shape, and (xc, yc) the screen coordinates of the center of the shape.

  • You may use sin() and Math.cos() to compute sine and cosine functions, and Math.round() to round a number to its nearest integer. Please refer to https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html for details of the Math class.

 

The Square class

The Square class is used to model squares. It is a subclass of the Shape class and it inherits all the instance variables and methods of the Shape class. The Square class overrides the setVertices() method for setting the local coordinates of the 4 vertices of a standard square.

Below is a detailed description for the Square class.

Specification of the Square class: instance variables inherited from Shape: color, filled, theta, xc, yc, xLocal, yLocal

methods inherited from Shape: translate, rotate, getX, getY

overriding method:  

void setVertices(double d) – a method for setting the local coordinates of the 4 vertices of a standard square. Here, a standard square has its center located at (0, 0) and its sides being parallel to the x- and y-axes of its local coordinate system. The parameter d specifies half-the-length of a side of the square.

* You should make all the instance variables and methods public by using the public access modifiers.

 

Figure 2. The local coordinates of the 4 vertices of a standard square with a side of 2d.

For a standard square with a side of 2d, the local coordinates of its 4 vertices in counter clockwise order starting from the lower right corner are (d, d), (d, –d), (-d, –d) and (-d, d), respectively. The Triangle class

The Triangle class is used to model triangles. Like the Square class, it is a subclass of the

Shape class and it inherits all the instance variables and methods of the Shape class. The Triangle class overrides the setVertices() method for setting the local coordinates of the 3 vertices of a standard triangle. Below is a detailed description for the Triangle class.

Specification of the Triangle class: instance variables inherited from Shape: color, filled, theta, xc, yc, xLocal, yLocal

methods inherited from Shape: translate, rotate, getX, getY overriding method:  

void setVertices(double d) – a method for setting the local coordinates of the 3

vertices of a standard triangle. Here, a standard triangle is an equilateral triangle having its center located at (0, 0) and one of its vertex on the positive x-axis of its local coordinate system. The parameter d specifies the distance from the center of the triangle to any of its vertices.

* You should make all the instance variables and methods public by using the public access modifiers.

 

Figure 3. The local coordinates of the 3 vertices of a standard triangle with a distance of d from its center to any of its vertices.

For a standard triangle with a distance of d from its center to any of its vertices, the local coordinates of its 3 vertices in counter clockwise order starting from the one on the positive x-axis are (d, 0), (−𝑑 cos 𝜋/3 , −𝑑 sin 𝜋/3) and (−𝑑 cos 𝜋/3 , 𝑑 sin 𝜋/3), respectively.

The Circle class

The Circle class is used to model circles. Like the Square class and the Triangle class, it is a subclass of the Shape class and it inherits all the instance variables and methods of the Shape class. The Circle class overrides the setVertices() method for setting the local coordinates of the upper left and lower right vertices of an axis-aligned bounding box of a standard circle, as well as the getX() and getY() methods for retrieving the screen coordinates of the upper left and lower right vertices of this bounding box. Below is a detailed description for the Circle class.

Specification of the Circle class: instance variables inherited from Shape: color, filled, theta, xc, yc, xLocal, yLocal

methods inherited from Shape: translate, rotate

overriding methods:  void setVertices(double d) – a method for setting the local coordinates of the upper left and lower right vertices of an axis-aligned bounding box of a standard circle. Here, a standard circle is a circle having its center located at (0, 0) of its local coordinate system. The parameter d specifies the radius of the circle.

int[] getX() – a method for retrieving the x-coordinates of the upper left and lower right vertices of an axis-aligned bounding box of the circle in the screen coordinate system (rounded to nearest integers).

int[] getY() – a method for retrieving the y-coordinates of the upper left and lower right vertices of an axis-aligned bounding box of the circle in the screen coordinate system (rounded to nearest integers).

* You should make all the instance variables and methods public by using the public access modifiers.

 

 

Figure 4. The local coordinates of the upper left and lower right vertices of an axis-aligned bounding box of a standard circle with a radius of d.

For a standard circle with a radius of d, the local coordinates of the upper left and lower right vertices of its axis-aligned bounding box are (-d, –d) and (d, d), respectively. Their corresponding screen coordinates are (-d + xc, –d + yc) and (d + xc, d + yc), respectively, where (xc, yc) denote the screen coordinates of the center of the circle.

The tester classes

The tester classes are used to verify the correctness of your implementation of the above 4 classes. You should design your own tester classes. Generally, your tester classes should create an object of a class and access all its instance variables and methods using the dot operator, and print out debugging messages to the console. (You do not need to actually draw the shapes in your tester classes!)

A simple GUI for visualization

 

Figure 5. Assign1_GUI.java implements a simple GUI for visualizing the shape classes.

Assign1_GUI.java implements a simple GUI for you to test and visualize your shape classes. The GUI draws a square, a circle and a triangle on the canvas. When the user clicks on a shape, the shape rotates clockwise 360o.

  • Assignment-1-huzyu4.zip