Class PolygonSimple

  • All Implemented Interfaces:
    java.awt.Shape, java.lang.Cloneable

    public class PolygonSimple
    extends java.lang.Object
    implements java.awt.Shape, java.lang.Cloneable
    Implements a simple polygon with one continous region, by using two double arrays.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected double area  
      protected java.awt.geom.Rectangle2D.Double bounds  
      protected Point2D centroid
      centroid of the polygon is stored for faster access, once it is computed
      int length
      y-coordinates
      protected PolygonSimple oldPolygon
      Stores the orginal polygon result, without shrinking
      protected java.util.Random seed
      Used for generation of a random point in a polygon.
      protected double[] x  
      protected double[] y
      x-coordinates
    • Field Detail

      • seed

        protected java.util.Random seed
        Used for generation of a random point in a polygon.
      • centroid

        protected Point2D centroid
        centroid of the polygon is stored for faster access, once it is computed
      • area

        protected double area
      • bounds

        protected java.awt.geom.Rectangle2D.Double bounds
      • oldPolygon

        protected PolygonSimple oldPolygon
        Stores the orginal polygon result, without shrinking
      • x

        protected double[] x
      • y

        protected double[] y
        x-coordinates
      • length

        public int length
        y-coordinates
    • Constructor Detail

      • PolygonSimple

        public PolygonSimple()
      • PolygonSimple

        public PolygonSimple​(int numberPoints)
        Parameters:
        numberPoints - initial array size, default initial array size is 16.
      • PolygonSimple

        public PolygonSimple​(double[] xPoints,
                             double[] yPoints,
                             int length)
        Parameters:
        xPoints - x-coordinate of the polygon points
        yPoints - y-coordinate of the polygon points
        length - number of elements which should be considered from the given arrays
      • PolygonSimple

        public PolygonSimple​(double[] xPoints,
                             double[] yPoints)
        Parameters:
        xPoints - x-coordinate of the polygon points
        yPoints - y-coordinate of the polygon points
    • Method Detail

      • crossProduct

        public static double crossProduct​(Point2D p1,
                                          Point2D p2)
      • distancePointToSegment

        public static double distancePointToSegment​(double x1,
                                                    double y1,
                                                    double x2,
                                                    double y2,
                                                    double x3,
                                                    double y3)
        * Shortest Distance from a Point p3 to a line segment p1-p2 http://local.wasp.uwa.edu.au/~pbourke/geometry/pointline/
        Parameters:
        x1 - x value of first segment point
        y1 - y value of first segment point
        x2 - x value of second segment point
        y2 - y value of second segment point
        x3 - x value of point we are interested in
        y3 - y value of point we are interested in
        Returns:
      • PolygonSimple

        public void PolygonSimple​(PolygonSimple simple)
        Replaces the pointers of the coordinate arrays to show to the given coordinate arrays.
      • contains

        public boolean contains​(double inX,
                                double inY)
        tests whether the given point is contained in the polygon (linear time).
        Specified by:
        contains in interface java.awt.Shape
      • contains

        public boolean contains​(java.awt.geom.Point2D p)
        Specified by:
        contains in interface java.awt.Shape
      • contains

        public boolean contains​(double x,
                                double y,
                                double w,
                                double h)
        tests whether each corner point of the given rectangle is contained in the polygon.
        Specified by:
        contains in interface java.awt.Shape
      • getBounds2D

        public java.awt.geom.Rectangle2D getBounds2D()
        Specified by:
        getBounds2D in interface java.awt.Shape
      • getPathIterator

        public java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform at)
        Returns the path iterator for the shape(rather slow compared to using the point arrays directly).
        Specified by:
        getPathIterator in interface java.awt.Shape
      • getPathIterator

        public java.awt.geom.PathIterator getPathIterator​(java.awt.geom.AffineTransform at,
                                                          double flatness)
        Specified by:
        getPathIterator in interface java.awt.Shape
      • intersects

        public boolean intersects​(java.awt.geom.Rectangle2D r)
        tests whether the given rectangle will intersect to the bounds of the polygon.
        Specified by:
        intersects in interface java.awt.Shape
      • intersects

        public boolean intersects​(double x,
                                  double y,
                                  double w,
                                  double h)
        Specified by:
        intersects in interface java.awt.Shape
      • getBounds

        public java.awt.Rectangle getBounds()
        Returns the bounding rectangle of this polygon.
        Specified by:
        getBounds in interface java.awt.Shape
      • getNumPoints

        public int getNumPoints()
        Return the number of points in this polygon.
        Returns:
        integer number of points
      • add

        public void add​(double x,
                        double y)
        Adds a point to the polygon. Extends the corresponding array if necessary.
      • scale

        public void scale​(double scalingFactor)
        Scales all points by multiplying with the scalingFactor
        Parameters:
        scalingFactor -
      • translate

        public void translate​(double tx,
                              double ty)
        Translates all points of the polygon by adding the values
        Parameters:
        tx - translation on x
        ty - translation on y
      • convexClip

        public PolygonSimple convexClip​(PolygonSimple poly)
        Uses the linear time algorithm of O'Rourke to compute the intersection of two convex polygons.
        Parameters:
        poly -
        Returns:
      • getArea

        public double getArea()
        Returns the area of the polygon.
      • getMinDistanceToBorder

        public double getMinDistanceToBorder​(double x,
                                             double y)
        For the given point, the minimal distance to the segments of the polygon is computed.
        Parameters:
        x -
        y -
        Returns:
      • getCentroid

        public Point2D getCentroid()
        Computes the centroid of a polygon.
        Returns:
        centroid point
      • clone

        public PolygonSimple clone()
        Overrides:
        clone in class java.lang.Object
      • shrinkForBorder

        public void shrinkForBorder​(double percentage)
        Default percentage can be 0.96
        Parameters:
        percentage -
      • getRelativePosition

        public Point2D getRelativePosition​(Point2D vector)
        We get a vector which describes where the point should be relative to the center. We change the length of the vector so that the point fits in the polygon. (reimplementation needed here)
        Returns:
        Point which is contained by this polygon and has same direction as the given vector point
      • getInnerPoint

        public Point2D getInnerPoint()
        Returns a random point in the polygon.
        Returns:
      • getIntersectionWithPolygon

        public Point2D getIntersectionWithPolygon​(java.lang.Double inx,
                                                  java.lang.Double iny,
                                                  java.lang.Double outx,
                                                  java.lang.Double outy)
        Computes the intersection point iff (inx,iny) is within the polygon and (outx,outy) is outside of the polygon. Returns null if the is no intersection or the line crosses the complete polygon.
        Parameters:
        inx - x-coordinate of the presumably inner point
        iny - y-coordiante of the presumably inner point
        outx - x-coordinate of the presumably outer point
        outy - y-coordinate of the presumably outer point
        Returns:
        Intersection Point
      • getXPoints

        public double[] getXPoints()
        Array with x-values of the polygon points.
        Returns:
      • getYPoints

        public double[] getYPoints()
        Array with y-values of the polygon points.
        Returns:
      • getOriginalPolygon

        public PolygonSimple getOriginalPolygon()
        If the polygon is modified by e.g. shrinking, this method returns the original polygon. If the polyogn was not modified, it can return null.
        Returns: