math.geom2d.curve
Class CurveSet2D<T extends Curve2D>

java.lang.Object
  extended by math.geom2d.curve.CurveSet2D<T>
All Implemented Interfaces:
java.awt.Shape, java.lang.Iterable<T>, Curve2D, Shape2D
Direct Known Subclasses:
BoundarySet2D, PolyCurve2D

public class CurveSet2D<T extends Curve2D>
extends java.lang.Object
implements Curve2D, java.lang.Iterable<T>

A parameterized set of curves. A curve cannot be included twice in a CurveSet2D.

Author:
Legland

Field Summary
protected  java.util.ArrayList<T> curves
          The inner array of curves
 
Fields inherited from interface math.geom2d.Shape2D
ACCURACY, defaultClipWindow, EMPTY_SET
 
Constructor Summary
CurveSet2D()
          Empty constructor.
CurveSet2D(java.util.Collection<? extends T> curves)
          Constructor from a collection of curves.
CurveSet2D(T[] curves)
          Constructor from an array of curves.
 
Method Summary
 void addCurve(T curve)
          Adds the curve to the curve set, if it does not already belongs to the set.
 void clearCurves()
          Clears the inner curve collection.
 CurveSet2D<? extends Curve2D> clip(Box2D box)
          Clip a curve, and return a CurveSet2D.
 boolean contains(double x, double y)
          return true if one of the curves contains the point
 boolean contains(double x, double y, double w, double h)
          Always return false
 boolean contains(java.awt.geom.Point2D p)
          return true if one of the curves contains the point
 boolean contains(java.awt.geom.Rectangle2D rect)
          Always return false
 boolean equals(java.lang.Object obj)
          Return true if obj is a CurveSet2D with the same number of curves, and such that each curve belongs to both objects.
protected static double fromUnitSegment(double t, double t0, double t1)
          Transform the value t between 0 and 1 in a value given between t0 and t1.
 Box2D getBoundingBox()
          Return bounding box for the CurveSet2D.
 java.awt.Rectangle getBounds()
          Return bounding box of the shape.
 java.awt.geom.Rectangle2D getBounds2D()
          Return more precise bounds for the shape.
 java.util.Collection<ContinuousCurve2D> getContinuousCurves()
          Returns the collection of continuous curves which constitute this curve.
 int getCurveNumber()
          Returns the number of curves in the collection
 java.util.Collection<T> getCurves()
          Returns the collection of curves
 double getDistance(double x, double y)
          get the distance of the shape to the given point, specified by x and y, or the distance of point to the frontier of the shape in the case of a plain (i.e. fillable) shape.
 double getDistance(java.awt.geom.Point2D p)
          get the distance of the shape to the given point, or the distance of point to the frontier of the shape in the case of a plain shape.
 T getFirstCurve()
          Returns the first curve of the collection if it exists, null otherwise.
 Point2D getFirstPoint()
          Get the first point of the curve.
protected  java.awt.geom.GeneralPath getGeneralPath()
           
 java.util.Collection<Point2D> getIntersections(StraightObject2D line)
          Returns the intersection points of the curve with the specified line.
 T getLastCurve()
          Returns the last curve of the collection if it exists, null otherwise.
 Point2D getLastPoint()
          Get the last point of the curve.
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans)
           
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans, double flatness)
           
 Point2D getPoint(double t)
          Gets the point from a parametric representation of the curve.
 Point2D getPoint(double t, Point2D point)
          Same as getPoint(t), but gives the point as a parameter.
 double getPosition(Point2D point)
          Get position of the point on the curve.
 Curve2D getReverseCurve()
          Returns the curve with same trace on the plane with parametrization in reverse order.
 CurveSet2D<? extends Curve2D> getSubCurve(double t0, double t1)
          Return an instance of CurveSet2D.
 double getT0()
          Get value of parameter t for the first point of the curve.
 double getT1()
          Get value of parameter t for the last point of the curve.
 boolean intersects(double x, double y, double w, double h)
           
 boolean intersects(java.awt.geom.Rectangle2D rect)
           
 boolean isBounded()
          return true, if all curve pieces are bounded
 boolean isEmpty()
          Returns true if the CurveSet does not contain any curve.
 java.util.Iterator<T> iterator()
           
 double project(Point2D point)
          Returns the position of the closest orthogonal projection of the point on the curve, or of the closest singular point.
 void removeCurve(T curve)
          Removes the specified curve from the curve set.
protected static double toUnitSegment(double t, double t0, double t1)
          Mapping of the parameter t, relative to the local curve, into the interval [0 1], [0 1[, ]0 1], or ]0 1[, depending on the values of t0 and t1.
 CurveSet2D<? extends Curve2D> transform(AffineTransform2D trans)
          Transform each curve, and build a new CurveSet2D with the set of transformed curves.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

curves

protected java.util.ArrayList<T extends Curve2D> curves
The inner array of curves

Constructor Detail

CurveSet2D

public CurveSet2D()
Empty constructor. Initializes an empty array of curves.


CurveSet2D

public CurveSet2D(T[] curves)
Constructor from an array of curves.

Parameters:
curves - the array of curves in the set

CurveSet2D

public CurveSet2D(java.util.Collection<? extends T> curves)
Constructor from a collection of curves. The curves are added to the inner collection of curves.

Parameters:
curves - the collection of curves to add to the set
Method Detail

toUnitSegment

protected static final double toUnitSegment(double t,
                                            double t0,
                                            double t1)
Mapping of the parameter t, relative to the local curve, into the interval [0 1], [0 1[, ]0 1], or ]0 1[, depending on the values of t0 and t1.

Parameters:
t -
t0 -
t1 -
Returns:

fromUnitSegment

protected static final double fromUnitSegment(double t,
                                              double t0,
                                              double t1)
Transform the value t between 0 and 1 in a value given between t0 and t1.

Parameters:
t -
t0 -
t1 -
Returns:

addCurve

public void addCurve(T curve)
Adds the curve to the curve set, if it does not already belongs to the set.

Parameters:
curve - the curve to add

removeCurve

public void removeCurve(T curve)
Removes the specified curve from the curve set.

Parameters:
curve - the curve to remove

clearCurves

public void clearCurves()
Clears the inner curve collection.


getCurves

public java.util.Collection<T> getCurves()
Returns the collection of curves

Returns:
the inner collection of curves

getFirstCurve

public T getFirstCurve()
Returns the first curve of the collection if it exists, null otherwise.

Returns:
the first curve of the collection

getLastCurve

public T getLastCurve()
Returns the last curve of the collection if it exists, null otherwise.

Returns:
the last curve of the collection

getCurveNumber

public int getCurveNumber()
Returns the number of curves in the collection

Returns:
the number of curves in the collection

isEmpty

public boolean isEmpty()
Returns true if the CurveSet does not contain any curve.


getIntersections

public java.util.Collection<Point2D> getIntersections(StraightObject2D line)
Description copied from interface: Curve2D
Returns the intersection points of the curve with the specified line. The length of the result array is the number of intersection points.

Specified by:
getIntersections in interface Curve2D

getT0

public double getT0()
Description copied from interface: Curve2D
Get value of parameter t for the first point of the curve. It can be -Infinity, in this case the piece of curve is not bounded.

Specified by:
getT0 in interface Curve2D

getT1

public double getT1()
Description copied from interface: Curve2D
Get value of parameter t for the last point of the curve. It can be +Infinity, in this case the piece of curve is not bounded.

Specified by:
getT1 in interface Curve2D

getPoint

public Point2D getPoint(double t)
Description copied from interface: Curve2D
Gets the point from a parametric representation of the curve. If the parameter lies outside the definition range, the parameter corresponding to the closest bound is used instead. This method can be used to draw an approximated outline of a curve, by selecting multiple values for t and drawing lines between them.

Specified by:
getPoint in interface Curve2D

getPoint

public Point2D getPoint(double t,
                        Point2D point)
Description copied from interface: Curve2D
Same as getPoint(t), but gives the point as a parameter. This avoids repetitive memory allocations.

Specified by:
getPoint in interface Curve2D

getFirstPoint

public Point2D getFirstPoint()
Get the first point of the curve.

Specified by:
getFirstPoint in interface Curve2D
Returns:
the first point of the curve

getLastPoint

public Point2D getLastPoint()
Get the last point of the curve.

Specified by:
getLastPoint in interface Curve2D
Returns:
the last point of the curve.

getPosition

public double getPosition(Point2D point)
Description copied from interface: Curve2D
Get position of the point on the curve. If the point does not belong to the curve, return Double.NaN.

Specified by:
getPosition in interface Curve2D
Parameters:
point - a point belonging to the curve
Returns:
the position of the point on the curve

project

public double project(Point2D point)
Description copied from interface: Curve2D
Returns the position of the closest orthogonal projection of the point on the curve, or of the closest singular point. This function should always returns a valid value.

Specified by:
project in interface Curve2D
Parameters:
point - a point to project
Returns:
the position of the closest orthogonal projection

getReverseCurve

public Curve2D getReverseCurve()
Description copied from interface: Curve2D
Returns the curve with same trace on the plane with parametrization in reverse order.

Specified by:
getReverseCurve in interface Curve2D

getSubCurve

public CurveSet2D<? extends Curve2D> getSubCurve(double t0,
                                                 double t1)
Return an instance of CurveSet2D.

Specified by:
getSubCurve in interface Curve2D
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.

getDistance

public double getDistance(java.awt.geom.Point2D p)
Description copied from interface: Shape2D
get the distance of the shape to the given point, or the distance of point to the frontier of the shape in the case of a plain shape.

Specified by:
getDistance in interface Shape2D

getDistance

public double getDistance(double x,
                          double y)
Description copied from interface: Shape2D
get the distance of the shape to the given point, specified by x and y, or the distance of point to the frontier of the shape in the case of a plain (i.e. fillable) shape.

Specified by:
getDistance in interface Shape2D

isBounded

public boolean isBounded()
return true, if all curve pieces are bounded

Specified by:
isBounded in interface Shape2D

clip

public CurveSet2D<? extends Curve2D> clip(Box2D box)
Clip a curve, and return a CurveSet2D. If the curve is totally outside the box, return a CurveSet2D with 0 curves inside. If the curve is totally inside the box, return a CurveSet2D with only one curve, which is the original curve.

Specified by:
clip in interface Curve2D
Specified by:
clip in interface Shape2D
Parameters:
box - the clipping box
Returns:
the clipped shape

getBoundingBox

public Box2D getBoundingBox()
Return bounding box for the CurveSet2D.

Specified by:
getBoundingBox in interface Shape2D
Returns:
the bounding box of the shape.

transform

public CurveSet2D<? extends Curve2D> transform(AffineTransform2D trans)
Transform each curve, and build a new CurveSet2D with the set of transformed curves.

Specified by:
transform in interface Curve2D
Specified by:
transform in interface Shape2D
Parameters:
trans - an affine transform
Returns:
the transformed shape

getContinuousCurves

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

Specified by:
getContinuousCurves in interface Curve2D
Returns:
a collection of continuous curves.

contains

public boolean contains(java.awt.geom.Point2D p)
return true if one of the curves contains the point

Specified by:
contains in interface java.awt.Shape

contains

public boolean contains(double x,
                        double y)
return true if one of the curves contains the point

Specified by:
contains in interface java.awt.Shape

contains

public boolean contains(java.awt.geom.Rectangle2D rect)
Always return false

Specified by:
contains in interface java.awt.Shape

contains

public boolean contains(double x,
                        double y,
                        double w,
                        double h)
Always return false

Specified by:
contains in interface java.awt.Shape

getBounds

public java.awt.Rectangle getBounds()
Return bounding box of the shape.

Specified by:
getBounds in interface java.awt.Shape

getBounds2D

public java.awt.geom.Rectangle2D getBounds2D()
Return more precise bounds for the shape.

Specified by:
getBounds2D in interface java.awt.Shape

intersects

public boolean intersects(java.awt.geom.Rectangle2D rect)
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

getGeneralPath

protected java.awt.geom.GeneralPath getGeneralPath()

getPathIterator

public java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans)
Specified by:
getPathIterator in interface java.awt.Shape

getPathIterator

public java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans,
                                                  double flatness)
Specified by:
getPathIterator in interface java.awt.Shape

equals

public boolean equals(java.lang.Object obj)
Return true if obj is a CurveSet2D with the same number of curves, and such that each curve belongs to both objects.

Overrides:
equals in class java.lang.Object

iterator

public java.util.Iterator<T> iterator()
Specified by:
iterator in interface java.lang.Iterable<T extends Curve2D>