Class PolygonSimple
- java.lang.Object
-
- com.macrofocus.treemap.fastvoronoi.polygon.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 computedint
length
y-coordinatesprotected PolygonSimple
oldPolygon
Stores the orginal polygon result, without shrinkingprotected java.util.Random
seed
Used for generation of a random point in a polygon.protected double[]
x
protected double[]
y
x-coordinates
-
Constructor Summary
Constructors Constructor Description PolygonSimple()
PolygonSimple(double[] xPoints, double[] yPoints)
PolygonSimple(double[] xPoints, double[] yPoints, int length)
PolygonSimple(int numberPoints)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(double x, double y)
Adds a point to the polygon.void
add(Point2D p)
PolygonSimple
clone()
boolean
contains(double inX, double inY)
tests whether the given point is contained in the polygon (linear time).boolean
contains(double x, double y, double w, double h)
tests whether each corner point of the given rectangle is contained in the polygon.boolean
contains(Point2D p)
boolean
contains(java.awt.geom.Point2D p)
boolean
contains(java.awt.geom.Rectangle2D r)
PolygonSimple
convexClip(PolygonSimple poly)
Uses the linear time algorithm of O'Rourke to compute the intersection of two convex polygons.static double
crossProduct(Point2D p1, Point2D p2)
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/double
getArea()
Returns the area of the polygon.java.awt.Rectangle
getBounds()
Returns the bounding rectangle of this polygon.java.awt.geom.Rectangle2D
getBounds2D()
Point2D
getCentroid()
Computes the centroid of a polygon.Point2D
getInnerPoint()
Returns a random point in the polygon.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.double
getMinDistanceToBorder(double x, double y)
For the given point, the minimal distance to the segments of the polygon is computed.int
getNumPoints()
Return the number of points in this polygon.PolygonSimple
getOriginalPolygon()
If the polygon is modified by e.g.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).java.awt.geom.PathIterator
getPathIterator(java.awt.geom.AffineTransform at, double flatness)
Point2D
getRelativePosition(Point2D vector)
We get a vector which describes where the point should be relative to the center.double[]
getXPoints()
Array with x-values of the polygon points.double[]
getYPoints()
Array with y-values of the polygon points.boolean
intersects(double x, double y, double w, double h)
boolean
intersects(java.awt.geom.Rectangle2D r)
tests whether the given rectangle will intersect to the bounds of the polygon.void
PolygonSimple(PolygonSimple simple)
Replaces the pointers of the coordinate arrays to show to the given coordinate arrays.void
scale(double scalingFactor)
Scales all points by multiplying with the scalingFactorvoid
shrinkForBorder(double percentage)
Default percentage can be 0.96void
translate(double tx, double ty)
Translates all points of the polygon by adding the values
-
-
-
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 pointsyPoints
- y-coordinate of the polygon pointslength
- 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 pointsyPoints
- y-coordinate of the polygon points
-
-
Method Detail
-
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 pointy1
- y value of first segment pointx2
- x value of second segment pointy2
- y value of second segment pointx3
- x value of point we are interested iny3
- 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 interfacejava.awt.Shape
-
contains
public boolean contains(java.awt.geom.Rectangle2D r)
- Specified by:
contains
in interfacejava.awt.Shape
-
contains
public boolean contains(Point2D p)
-
contains
public boolean contains(java.awt.geom.Point2D p)
- Specified by:
contains
in interfacejava.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 interfacejava.awt.Shape
-
getBounds2D
public java.awt.geom.Rectangle2D getBounds2D()
- Specified by:
getBounds2D
in interfacejava.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 interfacejava.awt.Shape
-
getPathIterator
public java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform at, double flatness)
- Specified by:
getPathIterator
in interfacejava.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 interfacejava.awt.Shape
-
intersects
public boolean intersects(double x, double y, double w, double h)
- Specified by:
intersects
in interfacejava.awt.Shape
-
getBounds
public java.awt.Rectangle getBounds()
Returns the bounding rectangle of this polygon.- Specified by:
getBounds
in interfacejava.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 xty
- translation on y
-
add
public void add(Point2D p)
-
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 classjava.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 pointiny
- y-coordiante of the presumably inner pointoutx
- x-coordinate of the presumably outer pointouty
- 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:
-
-