math.geom2d.polygon
Class LinearRing2D

java.lang.Object
  extended by math.geom2d.curve.AbstractContinuousCurve2D
      extended by math.geom2d.polygon.LinearCurve2D
          extended by math.geom2d.polygon.LinearRing2D
All Implemented Interfaces:
java.lang.Cloneable, CirculinearBoundary2D, CirculinearContinuousCurve2D, CirculinearContour2D, CirculinearCurve2D, CirculinearRing2D, CirculinearShape2D, ContinuousCurve2D, Curve2D, Boundary2D, ContinuousOrientedCurve2D, Contour2D, OrientedCurve2D, GeometricObject2D, Shape2D

public class LinearRing2D
extends LinearCurve2D
implements CirculinearRing2D

A LinearRing2D is a Polyline2D whose last point is connected to the first one. This is typically the boundary of a SimplePolygon2D.

The name 'LinearRing2D' was used for 2 reasons:

Author:
dlegland

Constructor Summary
LinearRing2D()
           
LinearRing2D(java.util.Collection<? extends Point2D> points)
           
LinearRing2D(double[] xcoords, double[] ycoords)
           
LinearRing2D(Point2D... vertices)
           
LinearRing2D(Point2D initialPoint)
           
 
Method Summary
 boolean almostEquals(GeometricObject2D obj, double eps)
          Checks if the two objects are similar up to a given threshold value.
 java.awt.geom.GeneralPath appendPath(java.awt.geom.GeneralPath path)
          Append the path of the curve to the given path.
 double area()
          Computes the signed area of the linear ring.
 LinearRing2D clone()
          Overrides Object declaration to ensure Curve2D implementation are cloned as Curve2D.
 java.util.Collection<? extends LinearRing2D> continuousCurves()
          Returns the collection of continuous curves which constitute this curve.
static LinearRing2D create(java.util.Collection<? extends Point2D> points)
          Static factory for creating a new LinearRing2D from a collection of points.
static LinearRing2D create(Point2D... vertices)
          Static factory for creating a new LinearRing2D from an array of points.
 CirculinearDomain2D domain()
          Returns the domain delimited by this boundary.
 LineSegment2D edge(int index)
          Returns the i-th edge of this linear curve.
 int edgeNumber()
          Returns the number of edges of this linear curve.
 java.util.Collection<LineSegment2D> edges()
          Returns an array of LineSegment2D.
 boolean equals(java.lang.Object object)
           
 void fill(java.awt.Graphics2D g2)
          Fills the interior of the boundary, using the Graphics current Paint.
 double getT1()
          Deprecated. replaced by t1() (since 0.11.1).
 boolean isClosed()
          Returns true, by definition of linear ring.
 boolean isInside(double x, double y)
           
 boolean isInside(Point2D point)
          Returns true if the point is 'inside' the domain bounded by the curve.
 LineSegment2D lastEdge()
          Returns the last edge of this linear ring.
 Point2D lastPoint()
          Returns the first point, as this is the same as the last point.
 CirculinearRing2D parallel(double dist)
          Creates a new curve, formed by the points with parameterization: p(t) = c(t) + d*n(t)/|n(t)|, with p(t) being a point of the original curve, n(t) the normal of the curve, and |n| being the norm of n.
 Point2D point(double t)
          Returns point from position as double.
 LinearRing2D reverse()
          Returns the linear ring with same points taken in reverse order.
 Polyline2D subCurve(double t0, double t1)
          Return an instance of Polyline2D.
 double t1()
          Returns the number of points in the linear ring.
 LinearRing2D transform(AffineTransform2D trans)
          Returns the transformed shape, as a LinerRing2D.
 CirculinearRing2D transform(CircleInversion2D inv)
          Transforms the shape by a circle inversion.
 double windingAngle(Point2D point)
          Return the angle portion that the curve turn around the given point.
 
Methods inherited from class math.geom2d.polygon.LinearCurve2D
addVertex, asGeneralPath, boundingBox, buffer, clearVertices, clip, closestVertexIndex, contains, contains, curvature, distance, distance, draw, firstEdge, firstPoint, getT0, insertVertex, intersections, isBounded, isEmpty, isSingular, leftTangent, length, length, position, position, project, removeVertex, removeVertex, rightTangent, setVertex, signedDistance, signedDistance, singularPoints, smoothPieces, t0, vertex, vertexArray, vertexIterator, vertexNumber, vertices
 
Methods inherited from class math.geom2d.curve.AbstractContinuousCurve2D
asAwtShape, asPolyline
 
Methods inherited from class java.lang.Object
getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface math.geom2d.circulinear.CirculinearContinuousCurve2D
clip, smoothPieces
 
Methods inherited from interface math.geom2d.curve.ContinuousCurve2D
asPolyline, curvature, leftTangent, rightTangent
 
Methods inherited from interface math.geom2d.circulinear.CirculinearBoundary2D
clip
 
Methods inherited from interface math.geom2d.circulinear.CirculinearCurve2D
length, length, position
 
Methods inherited from interface math.geom2d.circulinear.CirculinearShape2D
buffer
 
Methods inherited from interface math.geom2d.domain.OrientedCurve2D
signedDistance, signedDistance
 

Constructor Detail

LinearRing2D

public LinearRing2D()

LinearRing2D

public LinearRing2D(Point2D initialPoint)

LinearRing2D

public LinearRing2D(Point2D... vertices)

LinearRing2D

public LinearRing2D(double[] xcoords,
                    double[] ycoords)

LinearRing2D

public LinearRing2D(java.util.Collection<? extends Point2D> points)
Method Detail

create

public static LinearRing2D create(java.util.Collection<? extends Point2D> points)
Static factory for creating a new LinearRing2D from a collection of points.

Since:
0.8.1

create

public static LinearRing2D create(Point2D... vertices)
Static factory for creating a new LinearRing2D from an array of points.

Since:
0.8.1

area

public double area()
Computes the signed area of the linear ring. Algorithm is taken from page: http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/. Signed are is positive if polyline is oriented counter-clockwise, and negative otherwise. Result is wrong if polyline is self-intersecting.

Returns:
the signed area of the polyline.

edges

public java.util.Collection<LineSegment2D> edges()
Returns an array of LineSegment2D. The number of edges is the same as the number of vertices.

Specified by:
edges in class LinearCurve2D
Returns:
the edges of the polyline

edgeNumber

public int edgeNumber()
Description copied from class: LinearCurve2D
Returns the number of edges of this linear curve.

Specified by:
edgeNumber in class LinearCurve2D

edge

public LineSegment2D edge(int index)
Description copied from class: LinearCurve2D
Returns the i-th edge of this linear curve.

Specified by:
edge in class LinearCurve2D

lastEdge

public LineSegment2D lastEdge()
Returns the last edge of this linear ring. The last edge connects the last vertex with the first one.

Specified by:
lastEdge in class LinearCurve2D

parallel

public CirculinearRing2D parallel(double dist)
Description copied from interface: CirculinearCurve2D
Creates a new curve, formed by the points with parameterization: p(t) = c(t) + d*n(t)/|n(t)|, with p(t) being a point of the original curve, n(t) the normal of the curve, and |n| being the norm of n.
In the case of a continuous curve formed by several smooth circulinear elements, the parallels of contiguous elements are joined by a circle arc.

Specified by:
parallel in interface CirculinearBoundary2D
Specified by:
parallel in interface CirculinearContinuousCurve2D
Specified by:
parallel in interface CirculinearContour2D
Specified by:
parallel in interface CirculinearCurve2D
Specified by:
parallel in interface CirculinearRing2D
Overrides:
parallel in class LinearCurve2D
Parameters:
dist - the distance between the original curve and he parallel curve.
Returns:
the parallel curve

transform

public CirculinearRing2D transform(CircleInversion2D inv)
Description copied from interface: CirculinearShape2D
Transforms the shape by a circle inversion. The result is still an instance a CirculinearShape2D.

Specified by:
transform in interface CirculinearBoundary2D
Specified by:
transform in interface CirculinearContinuousCurve2D
Specified by:
transform in interface CirculinearContour2D
Specified by:
transform in interface CirculinearCurve2D
Specified by:
transform in interface CirculinearShape2D
Parameters:
inv - the circle inversion
Returns:
the transformed shape

domain

public CirculinearDomain2D domain()
Description copied from interface: Boundary2D
Returns the domain delimited by this boundary.

Specified by:
domain in interface CirculinearBoundary2D
Specified by:
domain in interface CirculinearRing2D
Specified by:
domain in interface Boundary2D
Returns:
the domain delimited by this boundary

fill

public void fill(java.awt.Graphics2D g2)
Description copied from interface: Boundary2D
Fills the interior of the boundary, using the Graphics current Paint.

Specified by:
fill in interface Boundary2D
Parameters:
g2 - the Graphics to fill on

windingAngle

public double windingAngle(Point2D point)
Description copied from interface: OrientedCurve2D
Return the angle portion that the curve turn around the given point. Result is a signed angle.

Specified by:
windingAngle in interface OrientedCurve2D
Parameters:
point - a point of the plane
Returns:
a signed angle

isInside

public boolean isInside(double x,
                        double y)

isInside

public boolean isInside(Point2D point)
Description copied from interface: Boundary2D
Returns true if the point is 'inside' the domain bounded by the curve.

Specified by:
isInside in interface Boundary2D
Specified by:
isInside in interface OrientedCurve2D
Parameters:
point - a point in the plane
Returns:
true if the point is on the left side of the curve.

isClosed

public boolean isClosed()
Returns true, by definition of linear ring.

Specified by:
isClosed in interface ContinuousCurve2D

point

public Point2D point(double t)
Returns point from position as double. Position t can be from 0 to n, with n equal to the number of vertices of the linear ring.

Specified by:
point in interface Curve2D

t1

public double t1()
Returns the number of points in the linear ring.

Specified by:
t1 in interface Curve2D

getT1

@Deprecated
public double getT1()
Deprecated. replaced by t1() (since 0.11.1).

Specified by:
getT1 in interface Curve2D

lastPoint

public Point2D lastPoint()
Returns the first point, as this is the same as the last point.

Specified by:
lastPoint in interface Curve2D
Overrides:
lastPoint in class AbstractContinuousCurve2D
Returns:
the last point of the curve.
See Also:
Curve2D.t1(), Curve2D.point(double)

continuousCurves

public java.util.Collection<? extends LinearRing2D> continuousCurves()
Description copied from interface: Curve2D
Returns the collection of continuous curves which constitute this curve.

Specified by:
continuousCurves in interface CirculinearBoundary2D
Specified by:
continuousCurves in interface CirculinearCurve2D
Specified by:
continuousCurves in interface Curve2D
Specified by:
continuousCurves in interface Boundary2D
Overrides:
continuousCurves in class LinearCurve2D
Returns:
a collection of continuous curves.

reverse

public LinearRing2D reverse()
Returns the linear ring with same points taken in reverse order. The first points is still the same. Points of reverse curve are the same as the original curve (same references).

Specified by:
reverse in interface CirculinearBoundary2D
Specified by:
reverse in interface CirculinearContinuousCurve2D
Specified by:
reverse in interface CirculinearContour2D
Specified by:
reverse in interface CirculinearCurve2D
Specified by:
reverse in interface CirculinearRing2D
Specified by:
reverse in interface ContinuousCurve2D
Specified by:
reverse in interface Curve2D
Specified by:
reverse in interface Boundary2D
Specified by:
reverse in interface ContinuousOrientedCurve2D
Specified by:
reverse in interface Contour2D
Specified by:
reverse in interface OrientedCurve2D

subCurve

public Polyline2D subCurve(double t0,
                           double t1)
Return an instance of Polyline2D. If t1 is lower than t0, the returned Polyline contains the origin of the curve.

Specified by:
subCurve in interface CirculinearContinuousCurve2D
Specified by:
subCurve in interface CirculinearCurve2D
Specified by:
subCurve in interface ContinuousCurve2D
Specified by:
subCurve in interface Curve2D
Specified by:
subCurve in interface ContinuousOrientedCurve2D
Parameters:
t0 - position of the start of the sub-curve
t1 - position of the end of the sub-curve
Returns:
the portion of original curve comprised between t0 and t1.

transform

public LinearRing2D transform(AffineTransform2D trans)
Returns the transformed shape, as a LinerRing2D.

Specified by:
transform in interface ContinuousCurve2D
Specified by:
transform in interface Curve2D
Specified by:
transform in interface Boundary2D
Specified by:
transform in interface ContinuousOrientedCurve2D
Specified by:
transform in interface Contour2D
Specified by:
transform in interface OrientedCurve2D
Specified by:
transform in interface Shape2D
Parameters:
trans - an affine transform
Returns:
the transformed shape

appendPath

public java.awt.geom.GeneralPath appendPath(java.awt.geom.GeneralPath path)
Description copied from interface: ContinuousCurve2D
Append the path of the curve to the given path.

Specified by:
appendPath in interface ContinuousCurve2D
Parameters:
path - a path to modify
Returns:
the modified path

almostEquals

public boolean almostEquals(GeometricObject2D obj,
                            double eps)
Description copied from interface: GeometricObject2D
Checks if the two objects are similar up to a given threshold value. This method can be used to compare the results of geometric computations, that introduce errors due to numerical computations.

Specified by:
almostEquals in interface GeometricObject2D
Parameters:
obj - the object to compare
eps - a threshold value, for example the minimal coordinate difference
Returns:
true if both object have the same value up to the threshold

equals

public boolean equals(java.lang.Object object)
Overrides:
equals in class java.lang.Object

clone

public LinearRing2D clone()
Description copied from interface: Curve2D
Overrides Object declaration to ensure Curve2D implementation are cloned as Curve2D.

Specified by:
clone in interface Curve2D
Specified by:
clone in class AbstractContinuousCurve2D
Returns:
the cloned curve