math.geom2d.conic
Class Parabola2D

java.lang.Object
  extended by math.geom2d.conic.Parabola2D
All Implemented Interfaces:
java.awt.Shape, Conic2D, Boundary2D, ContinuousBoundary2D, ContinuousCurve2D, ContinuousOrientedCurve2D, Curve2D, OrientedCurve2D, SmoothCurve2D, SmoothOrientedCurve2D, Shape2D

public class Parabola2D
extends java.lang.Object
implements SmoothOrientedCurve2D, Conic2D, ContinuousBoundary2D

A parabola, defined by its vertex, its orientation, and its pedal. Orientation is defined as the orientation of derivative at vertex point, with the second derivative pointing to the top.

Following parametric representation is used:

x(t)=t

y(t)=a*t^2

This is a signed parameter (negative a makes the parabola point to opposite side).

Author:
dlegland

Field Summary
protected  double a
          The parameter of the parabola.
protected  double theta
          orientation of the parabola
protected  double xv
          Coordinate of the vertex
protected  double yv
          Coordinate of the vertex
 
Fields inherited from interface math.geom2d.conic.Conic2D
CIRCLE, ELLIPSE, HYPERBOLA, NOT_A_CONIC, PARABOLA, POINT, STRAIGHT_LINE, TWO_LINES
 
Fields inherited from interface math.geom2d.curve.ContinuousCurve2D
CLOSED_EDGE, LOOP, OPEN_EDGE
 
Fields inherited from interface math.geom2d.Shape2D
ACCURACY, defaultClipWindow, EMPTY_SET
 
Constructor Summary
Parabola2D()
           
Parabola2D(double xv, double yv, double a, double theta)
           
Parabola2D(Point2D vertex, double a, double theta)
           
 
Method Summary
 java.awt.geom.GeneralPath appendPath(java.awt.geom.GeneralPath path)
          returns the appended path of a ParabolaArc2D, with -100
 CurveSet2D<ParabolaArc2D> clip(Box2D box)
          Clip the parabola by a box.
 boolean contains(double x, double y)
           
 boolean contains(double arg0, double arg1, double arg2, double arg3)
          return false, as every curve.
 boolean contains(java.awt.geom.Point2D point)
           
 boolean contains(java.awt.geom.Rectangle2D arg0)
          return false, as every curve.
 boolean equals(java.lang.Object obj)
           
 double getAngle()
          Return orientation angle of parabola.
 Polyline2D getAsPolyline(int n)
          return the polyline of the parabola arc from t=-100 to t=100.
 java.util.Collection<ContinuousBoundary2D> getBoundaryCurves()
          Return the different continuous curves composing the boundary
 Box2D getBoundingBox()
          Returns the bounding box of the shape.
 java.awt.Rectangle getBounds()
          Return bounding box of the shape.
 java.awt.geom.Rectangle2D getBounds2D()
          Return more precise bounds for the shape.
 double[] getCartesianEquation()
          Return the coefficient of the cartesian representation of the conic.
 Point2D getCenter()
           
 int getConicType()
           
 java.util.Collection<ContinuousCurve2D> getContinuousCurves()
          Returns the collection of continuous curves which constitute this curve.
 double getCurvature(double t)
          returns the curvature of the ellipse.
 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.
 double getEccentricity()
          Return 1, by definition for a parabola.
 Point2D getFirstPoint()
          return the constant Point2D.INFINITY_POINT.
 Point2D getFocus()
           
 Point2D getFocus1()
           
 Point2D getFocus2()
          Always return Point2D.INFINITY_POINT.
 java.awt.geom.GeneralPath getGeneralPath()
          compute path of a ParabolaArc2D with -100
 java.util.Collection<Point2D> getIntersections(StraightObject2D line)
          Returns the intersection points of the curve with the specified line.
 Point2D getLastPoint()
          return the constant Point2D.INFINITY_POINT.
 double getLength1()
          return 0.
 double getLength2()
          return 0.
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans)
          return path iterator of a ParabolaArc2D with -100
 java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans, double flatness)
          return path iterator of a ParabolaArc2D with -100
 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)
          Returns position of point on the parabola.
 Parabola2D getReverseCurve()
          Returns the parabola with same vertex, direction vector in opposite direction and opposite parameter p.
 double getSignedDistance(double x, double y)
          The same as getSignedDistance(Point2D), but by passing 2 double as arguments.
 double getSignedDistance(java.awt.geom.Point2D p)
          Get the signed distance of the curve to the given point : this distance is positive if the point lies outside the shape, and is negative if the point lies inside the shape.
 java.util.Collection<? extends SmoothCurve2D> getSmoothPieces()
          Returns a set of smooth curves.
 ParabolaArc2D getSubCurve(double t0, double t1)
          return a new ParabolaArc2D, or null if t1
 double getT0()
          Returns the parameter of the first point of the line, which is always Double.NEGATIVE_INFINITY.
 double getT1()
          Returns the parameter of the last point of the line, which is always Double.POSITIVE_INFINITY.
 Vector2D getTangent(double t)
           
 Vector2D getVector1()
          return the first vector of the parabola
 Vector2D getVector2()
          return second director vector of the parabola.
 double getWindingAngle(java.awt.geom.Point2D point)
          Return the angle portion that the curve turn around the given point.
 boolean intersects(double xr, double yr, double wr, double hr)
          Returns true if one of the edges of the rectangle intersects the parabola.
 boolean intersects(java.awt.geom.Rectangle2D rect)
          Returns true if one of the edges of the rectangle intersects the parabola.
 boolean isBounded()
          Always returns false, because a parabola is not bounded.
 boolean isCircle()
           
 boolean isClosed()
          Return true if the curve makes a loop, that is come back to starting point after covering the path.
 boolean isDegenerated()
           
 boolean isDirect()
          at the moment, return true.
 boolean isEllipse()
           
 boolean isHyperbola()
           
 boolean isInside(java.awt.geom.Point2D point)
          return true if the point is 'inside' the domain bounded by the curve.
 boolean isParabola()
           
 boolean isPoint()
           
 boolean isStraightLine()
           
 boolean isTwoLines()
           
 double project(Point2D point)
          Returns position of point on the parabola.
 Parabola2D transform(AffineTransform2D trans)
          Transforms the curve by an affine transform.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

xv

protected double xv
Coordinate of the vertex


yv

protected double yv
Coordinate of the vertex


theta

protected double theta
orientation of the parabola


a

protected double a
The parameter of the parabola. If positive, the parabola is direct.

Constructor Detail

Parabola2D

public Parabola2D()

Parabola2D

public Parabola2D(Point2D vertex,
                  double a,
                  double theta)

Parabola2D

public Parabola2D(double xv,
                  double yv,
                  double a,
                  double theta)
Method Detail

getFocus

public Point2D getFocus()

getConicType

public int getConicType()
Specified by:
getConicType in interface Conic2D

isEllipse

public boolean isEllipse()

isParabola

public boolean isParabola()

isHyperbola

public boolean isHyperbola()

isCircle

public boolean isCircle()

isStraightLine

public boolean isStraightLine()

isTwoLines

public boolean isTwoLines()

isPoint

public boolean isPoint()

isDegenerated

public boolean isDegenerated()

getCartesianEquation

public double[] getCartesianEquation()
Description copied from interface: Conic2D
Return the coefficient of the cartesian representation of the conic. Cartesian equation has the form :

a*x^2 + b*x*y + c*y^2 + d*x + e*y + f

The length of the array is then of size 6.

Specified by:
getCartesianEquation in interface Conic2D

getCenter

public Point2D getCenter()

getFocus1

public Point2D getFocus1()

getFocus2

public Point2D getFocus2()
Always return Point2D.INFINITY_POINT.


getVector1

public Vector2D getVector1()
return the first vector of the parabola


getVector2

public Vector2D getVector2()
return second director vector of the parabola.


getLength1

public double getLength1()
return 0.


getLength2

public double getLength2()
return 0.


getEccentricity

public double getEccentricity()
Return 1, by definition for a parabola.

Specified by:
getEccentricity in interface Conic2D

getAngle

public double getAngle()
Return orientation angle of parabola. It is defined as the angle of the derivative at the vertex.


isDirect

public boolean isDirect()
at the moment, return true.


getBoundaryCurves

public java.util.Collection<ContinuousBoundary2D> getBoundaryCurves()
Description copied from interface: Boundary2D
Return the different continuous curves composing the boundary

Specified by:
getBoundaryCurves in interface Boundary2D

getWindingAngle

public double getWindingAngle(java.awt.geom.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:
getWindingAngle in interface OrientedCurve2D
Parameters:
point - a point of the plane
Returns:
a signed angle

getSignedDistance

public double getSignedDistance(java.awt.geom.Point2D p)
Description copied from interface: OrientedCurve2D
Get the signed distance of the curve to the given point : this distance is positive if the point lies outside the shape, and is negative if the point lies inside the shape. In this case, absolute value of distance is equals to the distance to the border of the shape.

Specified by:
getSignedDistance in interface OrientedCurve2D
Parameters:
p - a point of the plane
Returns:
the signed distance to the curve

getSignedDistance

public double getSignedDistance(double x,
                                double y)
Description copied from interface: OrientedCurve2D
The same as getSignedDistance(Point2D), but by passing 2 double as arguments.

Specified by:
getSignedDistance in interface OrientedCurve2D
Parameters:
x - x-coord of a point
y - y-coord of a point
Returns:
the signed distance of the point (x,y) to the curve

isInside

public boolean isInside(java.awt.geom.Point2D point)
Description copied from interface: OrientedCurve2D
return true if the point is 'inside' the domain bounded by the curve.

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.

getTangent

public Vector2D getTangent(double t)
Specified by:
getTangent in interface SmoothCurve2D

getCurvature

public double getCurvature(double t)
returns the curvature of the ellipse.

Specified by:
getCurvature in interface SmoothCurve2D

getAsPolyline

public Polyline2D getAsPolyline(int n)
return the polyline of the parabola arc from t=-100 to t=100.

Specified by:
getAsPolyline in interface ContinuousCurve2D
Parameters:
n - the number of line segments
Returns:
a closed polyline with n line segments.

getSmoothPieces

public java.util.Collection<? extends SmoothCurve2D> getSmoothPieces()
Description copied from interface: ContinuousCurve2D
Returns a set of smooth curves.

Specified by:
getSmoothPieces in interface ContinuousCurve2D

isClosed

public boolean isClosed()
Description copied from interface: ContinuousCurve2D
Return true if the curve makes a loop, that is come back to starting point after covering the path.

Specified by:
isClosed in interface ContinuousCurve2D

getT0

public double getT0()
Returns the parameter of the first point of the line, which is always Double.NEGATIVE_INFINITY.

Specified by:
getT0 in interface Curve2D

getT1

public double getT1()
Returns the parameter of the last point of the line, which is always Double.POSITIVE_INFINITY.

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()
return the constant Point2D.INFINITY_POINT.

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

getLastPoint

public Point2D getLastPoint()
return the constant Point2D.INFINITY_POINT.

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

getPosition

public double getPosition(Point2D point)
Returns position of point on the parabola. If point is not on the parabola returns the positions on its "vertical" projection (i.e. its projection parallel to the symetry axis of the parabola).

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)
Returns position of point on the parabola. If point is not on the parabola returns the positions on its "vertical" projection (i.e. its projection parallel to the symetry axis of the parabola).

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

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

getReverseCurve

public Parabola2D getReverseCurve()
Returns the parabola with same vertex, direction vector in opposite direction and opposite parameter p.

Specified by:
getReverseCurve in interface Conic2D
Specified by:
getReverseCurve in interface Boundary2D
Specified by:
getReverseCurve in interface ContinuousBoundary2D
Specified by:
getReverseCurve in interface ContinuousCurve2D
Specified by:
getReverseCurve in interface ContinuousOrientedCurve2D
Specified by:
getReverseCurve in interface Curve2D
Specified by:
getReverseCurve in interface OrientedCurve2D
Specified by:
getReverseCurve in interface SmoothCurve2D
Specified by:
getReverseCurve in interface SmoothOrientedCurve2D

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.

getSubCurve

public ParabolaArc2D getSubCurve(double t0,
                                 double t1)
return a new ParabolaArc2D, or null if t1
Specified by:
getSubCurve in interface ContinuousCurve2D
Specified by:
getSubCurve in interface ContinuousOrientedCurve2D
Specified by:
getSubCurve in interface Curve2D
Specified by:
getSubCurve in interface SmoothCurve2D
Specified by:
getSubCurve in interface SmoothOrientedCurve2D
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()
Always returns false, because a parabola is not bounded.

Specified by:
isBounded in interface Shape2D

clip

public CurveSet2D<ParabolaArc2D> clip(Box2D box)
Clip the parabola by a box. The result is an instance of CurveSet2D, which contains only instances of ParabolaArc2D. If the parabola is not clipped, the result is an instance of CurveSet2D which contains 0 curves.

Specified by:
clip in interface Conic2D
Specified by:
clip in interface ContinuousCurve2D
Specified by:
clip in interface ContinuousOrientedCurve2D
Specified by:
clip in interface Curve2D
Specified by:
clip in interface OrientedCurve2D
Specified by:
clip in interface SmoothCurve2D
Specified by:
clip in interface SmoothOrientedCurve2D
Specified by:
clip in interface Shape2D
Parameters:
box - the clipping box
Returns:
the clipped shape

getBoundingBox

public Box2D getBoundingBox()
Description copied from interface: Shape2D
Returns the bounding box of the shape.

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

transform

public Parabola2D transform(AffineTransform2D trans)
Description copied from interface: Curve2D
Transforms the curve by an affine transform. The result is an instance of Curve2D.

Specified by:
transform in interface Conic2D
Specified by:
transform in interface Boundary2D
Specified by:
transform in interface ContinuousBoundary2D
Specified by:
transform in interface ContinuousCurve2D
Specified by:
transform in interface ContinuousOrientedCurve2D
Specified by:
transform in interface Curve2D
Specified by:
transform in interface OrientedCurve2D
Specified by:
transform in interface SmoothCurve2D
Specified by:
transform in interface SmoothOrientedCurve2D
Specified by:
transform in interface Shape2D
Parameters:
trans - an affine transform
Returns:
the transformed 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

contains

public boolean contains(double x,
                        double y)
Specified by:
contains in interface java.awt.Shape

contains

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

intersects

public boolean intersects(double xr,
                          double yr,
                          double wr,
                          double hr)
Returns true if one of the edges of the rectangle intersects the parabola.

Specified by:
intersects in interface java.awt.Shape

intersects

public boolean intersects(java.awt.geom.Rectangle2D rect)
Returns true if one of the edges of the rectangle intersects the parabola.

Specified by:
intersects in interface java.awt.Shape

contains

public boolean contains(double arg0,
                        double arg1,
                        double arg2,
                        double arg3)
return false, as every curve.

Specified by:
contains in interface java.awt.Shape

contains

public boolean contains(java.awt.geom.Rectangle2D arg0)
return false, as every curve.

Specified by:
contains in interface java.awt.Shape

appendPath

public java.awt.geom.GeneralPath appendPath(java.awt.geom.GeneralPath path)
returns the appended path of a ParabolaArc2D, with -100
Specified by:
appendPath in interface ContinuousCurve2D
Parameters:
path - a path to modify
Returns:
the modified path

getGeneralPath

public java.awt.geom.GeneralPath getGeneralPath()
compute path of a ParabolaArc2D with -100

getPathIterator

public java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans)
return path iterator of a ParabolaArc2D with -100
Specified by:
getPathIterator in interface java.awt.Shape

getPathIterator

public java.awt.geom.PathIterator getPathIterator(java.awt.geom.AffineTransform trans,
                                                  double flatness)
return path iterator of a ParabolaArc2D with -100
Specified by:
getPathIterator in interface java.awt.Shape

equals

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