Advertisement
Guest User

Untitled

a guest
Mar 1st, 2016
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.09 KB | None | 0 0
  1. import java.util.Arrays;
  2.  
  3. public class Polygon
  4. {
  5.    
  6.     private int ncorners = 0;
  7.     private Point[] points;
  8.    /**
  9.       Constructs a Polygon object with no corners
  10.    */
  11.    public Polygon()
  12.    {
  13.        this.points = new Point[0];
  14.        this.ncorners = 0;
  15.    }
  16.    
  17.    /**
  18.       Adds a point to the list.
  19.       @param p the point to add
  20.    */
  21.    public void add(Point p)
  22.    {
  23.        points = addToArray(points, p);
  24.        ncorners++;
  25.    }
  26.    
  27.    /**
  28.       Computes the area of a polygon.
  29.       @return area of a polygon
  30.    */
  31.    public double getArea()
  32.    {
  33.       if (ncorners < 3) {
  34.           return 0;
  35.       }
  36.       else if (ncorners == 3) {
  37.           return getTriangleSize(points);
  38.       }else {
  39.           Point startingPoint = points[0];
  40.           Point toDelete =  points[1];
  41.           Point toDraw = points[2];
  42.          
  43.           points = removeFromArray(points, toDelete);
  44.           Polygon p = new Polygon();
  45.           for(Point a : points) {
  46.               p.add(a);
  47.           }
  48.          
  49.           return getTriangleSize(new Point[]{startingPoint, toDelete, toDraw}) + p.getArea();
  50.       }
  51.    }
  52.    
  53.    private double getTriangleSize(Point[] pointArray) {
  54.        
  55.        //Just making the triangle calculation algorithm easier to type.
  56.        double x1 = pointArray[0].getX();
  57.        double y1 = pointArray[0].getY();
  58.        double x2 = pointArray[1].getX();
  59.        double y2 = pointArray[1].getY();
  60.        double x3 = pointArray[2].getX();
  61.        double y3 = pointArray[2].getY();
  62.        
  63.        double answer = ((x1*y2) + (x2*y3) + (x3*y1) - (y1*x2) - (y2*x3) - (y3*x1)) / 2;
  64.        if(answer < 0) answer = answer * (-1);
  65.        return answer;
  66.    }
  67.    
  68.    private Point[] addToArray(Point[] array, Point newPoint) {
  69.        Point[] point = new Point[array.length + 1];
  70.        for(int i = 0 ; i < array.length; i++) {
  71.            point[i] = array[i];
  72.        }
  73.        point[point.length-1] = newPoint;
  74.        return point;
  75.    }
  76.    
  77.    private Point[] removeFromArray(Point[] array, Point toRemove) {
  78.        int i, j;
  79.        for (i = j = 0; j < array.length; j++) if (!(toRemove ==array[j])) array[i++] = array[j];
  80.        return Arrays.copyOf(array, i);
  81.    }
  82.    
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement