math.geom2d.conic
Class CircleArc2D

java.lang.Object
  extended by math.geom2d.curve.AbstractContinuousCurve2D
      extended by math.geom2d.curve.AbstractSmoothCurve2D
          extended by math.geom2d.conic.CircleArc2D
All Implemented Interfaces:
java.lang.Cloneable, CirculinearContinuousCurve2D, CirculinearCurve2D, CirculinearElement2D, CirculinearShape2D, CircularShape2D, EllipseArcShape2D, ContinuousCurve2D, Curve2D, SmoothCurve2D, ContinuousOrientedCurve2D, OrientedCurve2D, SmoothOrientedCurve2D, GeometricObject2D, Shape2D

public class CircleArc2D
extends AbstractSmoothCurve2D
implements EllipseArcShape2D, CircularShape2D, CirculinearElement2D, java.lang.Cloneable

A circle arc, defined by the center and the radius of the containing circle, by a starting angle, and by a (signed) angle extent.

A circle arc is directed: if angle extent is positive, the arc is counter clockwise. Otherwise, it is clockwise.

A circle arc is parameterized using angle from center. The arc contains all points with a parametric equation of t, for each t between 0 and the angle extent.

Author:
dlegland

Field Summary
 
Fields inherited from interface math.geom2d.Shape2D
ACCURACY
 
Constructor Summary
CircleArc2D()
          Create a circle arc whose support circle is centered on (0,0) and has a radius equal to 1.
CircleArc2D(Circle2D circle, double startAngle, double angleExtent)
          create a new circle arc based on an already existing circle.
CircleArc2D(Circle2D circle, double startAngle, double endAngle, boolean direct)
          create a new circle arc based on an already existing circle, specifying if arc is direct or not.
CircleArc2D(double xc, double yc, double r, double start, double extent)
          Base constructor with all parameters specified
CircleArc2D(double xc, double yc, double r, double startAngle, double endAngle, boolean direct)
          Base constructor, for constructing arc from circle parameters, start and end angles, and by specifying whether arc is direct or not.
CircleArc2D(Point2D center, double radius, double startAngle, double angleExtent)
          Create a new circle arc with specified point center and radius
CircleArc2D(Point2D center, double radius, double start, double end, boolean direct)
          Create a new circle arc with specified point center and radius, start and end angles, and by specifying whether arc is direct or not.
 
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.
 Polyline2D asPolyline(int n)
          Converts this continuous curve to an instance of LinearCurve2D with the given number of edges.
 Box2D boundingBox()
          Returns the bounding box of the shape.
 CirculinearDomain2D buffer(double dist)
          Computes the buffer of the shape, formed by the set of points located at a distance from the shape that is lower or equal to d.
 CurveSet2D<CircleArc2D> clip(Box2D box)
          Clips the circle arc by a box.
 CircleArc2D clone()
          Overrides Object declaration to ensure Curve2D implementation are cloned as Curve2D.
 boolean contains(double x, double y)
          Checks if the shape contains the planar point defined by (x,y).
 boolean contains(Point2D p)
          Checks if the shape contains the given point.
 boolean containsAngle(double angle)
           
 java.util.Collection<? extends CircleArc2D> continuousCurves()
          Returns a collection of curves containing only this circle arc.
static CircleArc2D create(Circle2D support, double startAngle, double angleExtent)
          Deprecated. since 0.11.1
static CircleArc2D create(Circle2D support, double startAngle, double endAngle, boolean direct)
          Deprecated. since 0.11.1
static CircleArc2D create(Point2D center, double radius, double startAngle, double angleExtent)
          Deprecated. since 0.11.1
static CircleArc2D create(Point2D center, double radius, double startAngle, double endAngle, boolean direct)
          Deprecated. since 0.11.1
 double curvature(double t)
          Returns curvature of the circle arc.
 double distance(double x, double y)
          Returns 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 distance(Point2D p)
          Returns 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.
 void draw(java.awt.Graphics2D g2)
          Draws the curve on the given Graphics2D object.
 boolean equals(java.lang.Object obj)
          Two circle arc are equal if the have same center, same radius, same starting and ending angles, and same orientation.
 double getAngle(double position)
          Returns the angle associated with the given position
 double getAngleExtent()
           
 java.awt.geom.GeneralPath getGeneralPath()
           
 double getStartAngle()
           
 double getT0()
          Deprecated. replaced by t0()
 double getT1()
          Deprecated. replaced by t1()
 java.util.Collection<Point2D> intersections(LinearShape2D line)
          Computes intersections of the circle arc with a line.
 boolean isBounded()
          Returns true, as a circle arc is bounded by definition.
 boolean isClosed()
          Returns false, as a circle arc is never closed by definition.
 boolean isDirect()
          Returns true if the circle arc is direct, i.e. if the angle extent is positive.
 boolean isEmpty()
          Returns false.
 boolean isInside(Point2D point)
          Returns true if the point is 'inside' the domain bounded by the curve.
 double length()
           
 double length(double pos)
           
 CircleArc2D parallel(double dist)
          Returns the circle arc parallel to this circle arc, at the distance dist.
 Point2D point(double t)
          Returns the position of a point form the curvilinear position.
 double position(double length)
           
 double position(Point2D point)
          Returns relative position between 0 and the angle extent.
 double project(Point2D point)
          Returns the position of the closest orthogonal projection of the point on the curve, or of the closest singular point.
 CircleArc2D reverse()
          Returns the circle arc which refers to the same parent circle, but with exchanged extremities.
 double signedDistance(double x, double y)
          The same as distanceSigned(Point2D), but by passing 2 double as arguments.
 double signedDistance(Point2D p)
          Returns the signed distance of the curve to the given point.
 java.util.Collection<? extends CircleArc2D> smoothPieces()
          Returns a collection of curves containing only this circle arc.
 CircleArc2D subCurve(double t0, double t1)
          Returns a new CircleArc2D.
 Circle2D supportingCircle()
          Returns the circle that contains the circle arc.
 double t0()
          Returns 0.
 double t1()
          Returns the last position of the circle are, which is given by the absolute angle of angle extent of this arc.
 Vector2D tangent(double t)
          Returns the tangent of the curve at the given position.
 java.lang.String toString()
           
 EllipseArcShape2D transform(AffineTransform2D trans)
          Returns an instance of EllipseArc2D, or CircleArc2D if transform is a similarity.
 CirculinearElement2D 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.curve.AbstractSmoothCurve2D
isSingular, leftTangent, normal, rightTangent, singularPoints, vertices
 
Methods inherited from class math.geom2d.curve.AbstractContinuousCurve2D
asAwtShape, firstPoint, lastPoint
 
Methods inherited from class java.lang.Object
getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface math.geom2d.curve.SmoothCurve2D
normal
 
Methods inherited from interface math.geom2d.curve.ContinuousCurve2D
leftTangent, rightTangent
 
Methods inherited from interface math.geom2d.curve.Curve2D
asAwtShape, firstPoint, isSingular, lastPoint, singularPoints, vertices
 

Constructor Detail

CircleArc2D

public CircleArc2D()
Create a circle arc whose support circle is centered on (0,0) and has a radius equal to 1. Start angle is 0, and angle extent is PI/2.


CircleArc2D

public CircleArc2D(Circle2D circle,
                   double startAngle,
                   double angleExtent)
create a new circle arc based on an already existing circle.


CircleArc2D

public CircleArc2D(Circle2D circle,
                   double startAngle,
                   double endAngle,
                   boolean direct)
create a new circle arc based on an already existing circle, specifying if arc is direct or not.


CircleArc2D

public CircleArc2D(Point2D center,
                   double radius,
                   double startAngle,
                   double angleExtent)
Create a new circle arc with specified point center and radius


CircleArc2D

public CircleArc2D(Point2D center,
                   double radius,
                   double start,
                   double end,
                   boolean direct)
Create a new circle arc with specified point center and radius, start and end angles, and by specifying whether arc is direct or not.


CircleArc2D

public CircleArc2D(double xc,
                   double yc,
                   double r,
                   double startAngle,
                   double endAngle,
                   boolean direct)
Base constructor, for constructing arc from circle parameters, start and end angles, and by specifying whether arc is direct or not.


CircleArc2D

public CircleArc2D(double xc,
                   double yc,
                   double r,
                   double start,
                   double extent)
Base constructor with all parameters specified

Method Detail

create

@Deprecated
public static CircleArc2D create(Circle2D support,
                                            double startAngle,
                                            double angleExtent)
Deprecated. since 0.11.1


create

@Deprecated
public static CircleArc2D create(Circle2D support,
                                            double startAngle,
                                            double endAngle,
                                            boolean direct)
Deprecated. since 0.11.1


create

@Deprecated
public static CircleArc2D create(Point2D center,
                                            double radius,
                                            double startAngle,
                                            double angleExtent)
Deprecated. since 0.11.1


create

@Deprecated
public static CircleArc2D create(Point2D center,
                                            double radius,
                                            double startAngle,
                                            double endAngle,
                                            boolean direct)
Deprecated. since 0.11.1


isDirect

public boolean isDirect()
Returns true if the circle arc is direct, i.e. if the angle extent is positive.


getStartAngle

public double getStartAngle()

getAngleExtent

public double getAngleExtent()

containsAngle

public boolean containsAngle(double angle)

getAngle

public double getAngle(double position)
Returns the angle associated with the given position


supportingCircle

public Circle2D supportingCircle()
Returns the circle that contains the circle arc.

Specified by:
supportingCircle in interface CircularShape2D

buffer

public CirculinearDomain2D buffer(double dist)
Description copied from interface: CirculinearShape2D
Computes the buffer of the shape, formed by the set of points located at a distance from the shape that is lower or equal to d.

Specified by:
buffer in interface CirculinearShape2D
Parameters:
dist - the maximal distance between a point of the buffer and the shape
Returns:
the buffer of the shape

parallel

public CircleArc2D parallel(double dist)
Returns the circle arc parallel to this circle arc, at the distance dist.

Specified by:
parallel in interface CirculinearContinuousCurve2D
Specified by:
parallel in interface CirculinearCurve2D
Specified by:
parallel in interface CirculinearElement2D
Parameters:
dist - the distance between the original curve and he parallel curve.
Returns:
the parallel curve

length

public double length()
Specified by:
length in interface CirculinearCurve2D
Returns:
the length of the curve

length

public double length(double pos)
Specified by:
length in interface CirculinearCurve2D
Returns:
the length from the beginning to the position given by pos

position

public double position(double length)
Specified by:
position in interface CirculinearCurve2D
Returns:
the position located at a given geodesic distance from the origin

transform

public CirculinearElement2D 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 CirculinearContinuousCurve2D
Specified by:
transform in interface CirculinearCurve2D
Specified by:
transform in interface CirculinearElement2D
Specified by:
transform in interface CirculinearShape2D
Parameters:
inv - the circle inversion
Returns:
the transformed shape

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(Point2D point)
Description copied from interface: OrientedCurve2D
Returns 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.

signedDistance

public double signedDistance(Point2D p)
Description copied from interface: OrientedCurve2D
Returns the signed distance of the curve to the given point. The distance is positive if the point lies outside the shape, and negative if the point lies inside the shape. In both cases, absolute value of distance is equals to the distance to the border of the shape.

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

signedDistance

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

Specified by:
signedDistance 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

tangent

public Vector2D tangent(double t)
Description copied from interface: SmoothCurve2D
Returns the tangent of the curve at the given position.

Specified by:
tangent in interface SmoothCurve2D
Parameters:
t - a position on the curve
Returns:
the tangent vector computed for position t
See Also:
SmoothCurve2D.normal(double)

curvature

public double curvature(double t)
Returns curvature of the circle arc. This is the same as the curvature of the parent circle, with a control on the sign that depends on the orientation.

Specified by:
curvature in interface ContinuousCurve2D
Parameters:
t - the position on the curve
Returns:
the curvature of the curve for position t

smoothPieces

public java.util.Collection<? extends CircleArc2D> smoothPieces()
Returns a collection of curves containing only this circle arc.

Specified by:
smoothPieces in interface CirculinearContinuousCurve2D
Specified by:
smoothPieces in interface ContinuousCurve2D
Overrides:
smoothPieces in class AbstractSmoothCurve2D

isClosed

public boolean isClosed()
Returns false, as a circle arc is never closed by definition.

Specified by:
isClosed in interface ContinuousCurve2D

asPolyline

public Polyline2D asPolyline(int n)
Description copied from class: AbstractContinuousCurve2D
Converts this continuous curve to an instance of LinearCurve2D with the given number of edges. Returns either an instance of Polyline2D or LinearRing2D, depending on the curve is closed or not. This method can be overridden to return the correct type.

Specified by:
asPolyline in interface ContinuousCurve2D
Overrides:
asPolyline in class AbstractContinuousCurve2D
Parameters:
n - the number of line segments
Returns:
a polyline with n line segments.
See Also:
ContinuousCurve2D.asPolyline(int)

t0

public double t0()
Returns 0.

Specified by:
t0 in interface Curve2D

getT0

@Deprecated
public double getT0()
Deprecated. replaced by t0()

Specified by:
getT0 in interface Curve2D

t1

public double t1()
Returns the last position of the circle are, which is given by the absolute angle of angle extent of this arc.

Specified by:
t1 in interface Curve2D

getT1

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

Specified by:
getT1 in interface Curve2D

point

public Point2D point(double t)
Returns the position of a point form the curvilinear position.

Specified by:
point in interface Curve2D

position

public double position(Point2D point)
Returns relative position between 0 and the angle extent.

Specified by:
position in interface Curve2D
Parameters:
point - a point belonging to the curve
Returns:
the position of the point on the curve
See Also:
Curve2D.point(double)

intersections

public java.util.Collection<Point2D> intersections(LinearShape2D line)
Computes intersections of the circle arc with a line. Return an array of Point2D, of size 0, 1 or 2 depending on the distance between circle and line. If there are 2 intersections points, the first one in the array is the first one on the line.

Specified by:
intersections in interface Curve2D

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

subCurve

public CircleArc2D subCurve(double t0,
                            double t1)
Returns a new CircleArc2D. Variables t0 and t1 must be comprised between 0 and the angle extent of the arc.

Specified by:
subCurve in interface CirculinearContinuousCurve2D
Specified by:
subCurve in interface CirculinearCurve2D
Specified by:
subCurve in interface CirculinearElement2D
Specified by:
subCurve in interface CircularShape2D
Specified by:
subCurve in interface EllipseArcShape2D
Specified by:
subCurve in interface ContinuousCurve2D
Specified by:
subCurve in interface Curve2D
Specified by:
subCurve in interface SmoothCurve2D
Specified by:
subCurve in interface ContinuousOrientedCurve2D
Specified by:
subCurve 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.

reverse

public CircleArc2D reverse()
Returns the circle arc which refers to the same parent circle, but with exchanged extremities.

Specified by:
reverse in interface CirculinearContinuousCurve2D
Specified by:
reverse in interface CirculinearCurve2D
Specified by:
reverse in interface CirculinearElement2D
Specified by:
reverse in interface CircularShape2D
Specified by:
reverse in interface EllipseArcShape2D
Specified by:
reverse in interface ContinuousCurve2D
Specified by:
reverse in interface Curve2D
Specified by:
reverse in interface SmoothCurve2D
Specified by:
reverse in interface ContinuousOrientedCurve2D
Specified by:
reverse in interface OrientedCurve2D
Specified by:
reverse in interface SmoothOrientedCurve2D

continuousCurves

public java.util.Collection<? extends CircleArc2D> continuousCurves()
Returns a collection of curves containing only this circle arc.

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

distance

public double distance(Point2D p)
Description copied from interface: Shape2D
Returns 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:
distance in interface Shape2D

distance

public double distance(double x,
                       double y)
Description copied from interface: Shape2D
Returns 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:
distance in interface Shape2D

isBounded

public boolean isBounded()
Returns true, as a circle arc is bounded by definition.

Specified by:
isBounded in interface Shape2D

clip

public CurveSet2D<CircleArc2D> clip(Box2D box)
Clips the circle arc by a box. The result is a CurveSet2D, which contains only instances of CircleArc2D. If circle arc is not clipped, the result is an instance of CurveSet2D with zero curves.

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

transform

public EllipseArcShape2D transform(AffineTransform2D trans)
Returns an instance of EllipseArc2D, or CircleArc2D if transform is a similarity.

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

contains

public boolean contains(Point2D p)
Description copied from interface: Shape2D
Checks if the shape contains the given point.

Specified by:
contains in interface Shape2D

contains

public boolean contains(double x,
                        double y)
Description copied from interface: Shape2D
Checks if the shape contains the planar point defined by (x,y).

Specified by:
contains in interface Shape2D

isEmpty

public boolean isEmpty()
Returns false.

Specified by:
isEmpty in interface Shape2D
Returns:
true if the shape does not contain any point.

boundingBox

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

Specified by:
boundingBox in interface Shape2D
Returns:
the bounding box of the 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

getGeneralPath

public java.awt.geom.GeneralPath getGeneralPath()

draw

public void draw(java.awt.Graphics2D g2)
Description copied from interface: Curve2D
Draws the curve on the given Graphics2D object.

Specified by:
draw in interface Curve2D
Specified by:
draw in interface Shape2D
Overrides:
draw in class AbstractContinuousCurve2D
Parameters:
g2 - the graphics to draw the curve in

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

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

equals

public boolean equals(java.lang.Object obj)
Two circle arc are equal if the have same center, same radius, same starting and ending angles, and same orientation.

Overrides:
equals in class java.lang.Object

clone

public CircleArc2D 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 AbstractSmoothCurve2D
Returns:
the cloned curve