package geometri; import java.awt.*; /** * This interface describes drawable geometrical forms. * Each form contains of: A rectangle surrounding the form as narrow as * possible defined by its width and height, the position of * the upper left corner of the surrounding rectangle, * and a colour given as an object of java.awt.Color. *

* Furthermore the forms may be compared. First the areas of the * forms are compared and if the areas are equal then the * the perimeters are compared. * The area and the perimeter of a Point are 0. * The area of a * Line is 0 and its perimeter is the length of * the line. *

* The forms may be moved, but may not be modyfied in any other way. * Only positive x och y coordinates are allowed for the position. * Negative values for the coordinates gives an * IllegalPositionException, which is declared * in this package. *

* Finally, the forms may be compared for equality, * where all components except the positions of the forms * are compared. * * @author (Bror Bjerner/Christer Carlsson) * @version (nov 2014) */ public interface GeometricalForm extends Comparable { /** * Get the area of this form rounded * to closest integer. * * @return the computed area. */ public int getArea(); /** * The method compareTo compares the area and perimeter of the forms * to decide if the given geometrical form is less or greater * than this object. If they have the same area, the * perimeter decides. * * @param f The geometrical form to compare with. * @return An integer smaller than 0 if this form is smaller than the form given as argument, * 0 if the sizes are equal, and a positive integer otherwise. */ public int compareTo( GeometricalForm f ); /** * Fill the area of the form at the position of the form * with the color of the form. * * @param g A graphic pen to draw with. */ public void fill( Graphics g ); /** * Get the colour of this form. * * @return the colour of this form. */ public Color getColor(); /** * Get the width of the surrounding rectangle of this form. * * @return the width. */ public int getWidth(); /** * Get the height of the surrounding rectangle of this form. * * @return the x coordinate. */ public int getHeight(); /** * Get the x coordinate of the position of this form. * * @return the x coordinate. */ public int getX(); /** * Get the y coordinate of the position of this form. * * @return the y coordinate. */ public int getY(); /** * Move the form the given distances. * Check if the new coordinates are legal and * if they are, set the position to the new coordinates. * Otherwise an IllegalPositionException is thrown. * Origo is (0,0) and only positive coordinates are legal. * * @param dx move the form dx points to the right. * @param dy move the form dy points down. * @throws IllegalPositionException if any coordinate becomes negative. */ public void move( int dx, int dy ) throws IllegalPositionException; /** * Get the perimeter of this form rounded * to closest integer. * * @return the computed perimeter. */ public int getPerimeter(); /** * Place the form on given coordinates. * Check if the coordinates are legal. * Origo is (0,0) and only positive * coordinates are legal. * If they are legal, update the position with the new coordinates. * Otherwise an IllegalPositionException is thrown. * * @param x Distance right from origo. * @param y Distance down from origo. * @throws IllegalPositionException if any coordinate is negative. */ public void place( int x, int y ) throws IllegalPositionException; } // interface GeometricalForm