Index (Frames) | Index (No Frames) | Package | Package Tree | Tree
java.awt

Class Polygon

java.lang.Object
|
+--java.awt.Polygon

All Implemented Interfaces:

Shape, Serializable


public class Polygon

extends Object

implements Shape, Serializable

This class represents a polygon, a closed, two-dimensional region in a coordinate space. The region is bounded by an arbitrary number of line segments, between (x,y) coordinate vertices. The polygon has even-odd winding, meaning that a point is inside the shape if it crosses the boundary an odd number of times on the way to infinity.

There are some public fields; if you mess with them in an inconsistent manner, it is your own fault when you get NullPointerException, ArrayIndexOutOfBoundsException, or invalid results. Also, this class is not threadsafe.

Since:Authors:

Field Summary

java.awt.Rectanglebounds

The bounding box of this polygon.
intnpoints

This total number of endpoints.
int[]xpoints

The array of X coordinates of endpoints.
int[]ypoints

The array of Y coordinates of endpoints.

Constructor Summary

Polygon()

Initializes an empty polygon.
Polygon(int[] xpoints, int[] ypoints, int npoints)

Create a new polygon with the specified endpoints.

Method Summary

voidaddPoint(int x, int y)

Adds the specified endpoint to the polygon.
booleancontains(java.awt.Point p)

Tests whether or not the specified point is inside this polygon.
booleancontains(int x, int y)

Tests whether or not the specified point is inside this polygon.
booleancontains(double x, double y)

Tests whether or not the specified point is inside this polygon.
booleancontains(java.awt.geom.Point2D p)

Tests whether or not the specified point is inside this polygon.
booleancontains(double x, double y, double w, double h)

Test if a high-precision rectangle lies completely in the shape.
booleancontains(java.awt.geom.Rectangle2D r)

Test if a high-precision rectangle lies completely in the shape.
java.awt.RectanglegetBoundingBox()

Returns the bounding box of this polygon.
java.awt.RectanglegetBounds()

Returns the bounding box of this polygon.
java.awt.geom.Rectangle2DgetBounds2D()

Returns a high-precision bounding box of this polygon.
java.awt.geom.PathIteratorgetPathIterator(final AffineTransform transform)

Return an iterator along the shape boundary.
java.awt.geom.PathIteratorgetPathIterator(java.awt.geom.AffineTransform transform, double flatness)

Return an iterator along the flattened version of the shape boundary.
booleaninside(int x, int y)

Tests whether or not the specified point is inside this polygon.
booleanintersects(double x, double y, double w, double h)

Test if a high-precision rectangle intersects the shape.
booleanintersects(java.awt.geom.Rectangle2D r)

Test if a high-precision rectangle intersects the shape.
voidinvalidate()

Invalidate or flush all cached data.
voidreset()

Reset the polygon to be empty.
voidtranslate(int dx, int dy)

Translates the polygon by adding the specified values to all X and Y coordinates.

Field Details

bounds

protected Rectangle bounds

The bounding box of this polygon. This is lazily created and cached, so it must be invalidated after changing points.

See Also:


npoints

public int npoints

This total number of endpoints.


xpoints

public int[] xpoints

The array of X coordinates of endpoints. This should not be null.

See Also:


ypoints

public int[] ypoints

The array of Y coordinates of endpoints. This should not be null.

See Also:


Constructor Details

Polygon

public Polygon()

Initializes an empty polygon.


Polygon

public Polygon(int[] xpoints, int[] ypoints, int npoints)

Create a new polygon with the specified endpoints. The arrays are copied, so that future modifications to the parameters do not affect the polygon.

Parameters:

Throws:


Method Details

addPoint

public void addPoint(int x, int y)

Adds the specified endpoint to the polygon. This updates the bounding box, if it has been created.

Parameters:


contains

public boolean contains(double x, double y)

Tests whether or not the specified point is inside this polygon.

Since:Parameters:

Returns:


contains

public boolean contains(double x, double y, double w, double h)

Test if a high-precision rectangle lies completely in the shape. This is true if all points in the rectangle are in the shape. This implementation is precise.

Since:Parameters:

Returns:


contains

public boolean contains(int x, int y)

Tests whether or not the specified point is inside this polygon.

Since:Parameters:

Returns:

See Also:


contains

public boolean contains(java.awt.Point p)

Tests whether or not the specified point is inside this polygon.

Parameters:

Returns:

Throws:

See Also:


contains

public boolean contains(java.awt.geom.Point2D p)

Tests whether or not the specified point is inside this polygon.

Since:Parameters:

Returns:

Throws:

See Also:


contains

public boolean contains(java.awt.geom.Rectangle2D r)

Test if a high-precision rectangle lies completely in the shape. This is true if all points in the rectangle are in the shape. This implementation is precise.

Since:Parameters:

Returns:

Throws:

See Also:


getBoundingBox

public Rectangle getBoundingBox()

Returns the bounding box of this polygon. This is the smallest rectangle with sides parallel to the X axis that will contain this polygon.

Returns:

See Also:


getBounds

public Rectangle getBounds()

Returns the bounding box of this polygon. This is the smallest rectangle with sides parallel to the X axis that will contain this polygon.

Since:Returns:

See Also:


getBounds2D

public Rectangle2D getBounds2D()

Returns a high-precision bounding box of this polygon. This is the smallest rectangle with sides parallel to the X axis that will contain this polygon.

Since:Returns:

See Also:


getPathIterator

public PathIterator getPathIterator(final AffineTransform transform)

Return an iterator along the shape boundary. If the optional transform is provided, the iterator is transformed accordingly. Each call returns a new object, independent from others in use. This class is not threadsafe to begin with, so the path iterator is not either.

Since:Parameters:

Returns:


getPathIterator

public PathIterator getPathIterator(java.awt.geom.AffineTransform transform, double flatness)

Return an iterator along the flattened version of the shape boundary. Since polygons are already flat, the flatness parameter is ignored, and the resulting iterator only has SEG_MOVETO, SEG_LINETO and SEG_CLOSE points. If the optional transform is provided, the iterator is transformed accordingly. Each call returns a new object, independent from others in use. This class is not threadsafe to begin with, so the path iterator is not either.

Since:Parameters:

Returns:


inside

public boolean inside(int x, int y)

Tests whether or not the specified point is inside this polygon.

Parameters:

Returns:

See Also:


intersects

public boolean intersects(double x, double y, double w, double h)

Test if a high-precision rectangle intersects the shape. This is true if any point in the rectangle is in the shape. This implementation is precise.

Since:Parameters:

Returns:


intersects

public boolean intersects(java.awt.geom.Rectangle2D r)

Test if a high-precision rectangle intersects the shape. This is true if any point in the rectangle is in the shape. This implementation is precise.

Since:Parameters:

Returns:

Throws:

See Also:


invalidate

public void invalidate()

Invalidate or flush all cached data. After direct manipulation of the public member fields, this is necessary to avoid inconsistent results in methods like contains.

Since:See Also:


reset

public void reset()

Reset the polygon to be empty. The arrays are left alone, to avoid object allocation, but the number of points is set to 0, and all cached data is discarded. If you are discarding a huge number of points, it may be more efficient to just create a new Polygon.

Since:See Also:


translate

public void translate(int dx, int dy)

Translates the polygon by adding the specified values to all X and Y coordinates. This updates the bounding box, if it has been calculated.

Since:Parameters: