math.geom2d.spline
Class CubicBezierCurve2D
- java.lang.Object
-
- math.geom2d.curve.AbstractContinuousCurve2D
-
- math.geom2d.curve.AbstractSmoothCurve2D
-
- math.geom2d.spline.CubicBezierCurve2D
-
- All Implemented Interfaces:
- java.lang.Cloneable, ContinuousCurve2D, Curve2D, SmoothCurve2D, ContinuousOrientedCurve2D, OrientedCurve2D, GeometricObject2D, Shape2D
public class CubicBezierCurve2D extends AbstractSmoothCurve2D implements SmoothCurve2D, ContinuousOrientedCurve2D, java.lang.Cloneable
A cubic bezier curve, defined by 4 control points. The curve passes through the first and the last control points. The second and the third control points defines the tangents at the extremities of the curve. From javaGeom 0.8.0, this shape does not extends java.awt.geom.CubicCurve2D.Double anymore
-
-
Constructor Summary
Constructors Constructor and Description CubicBezierCurve2D()CubicBezierCurve2D(double[][] coefs)Build a new Bezier curve from its array of coefficients.CubicBezierCurve2D(double x1, double y1, double xctrl1, double yctrl1, double xctrl2, double yctrl2, double x2, double y2)Build a new Bezier curve of degree 3 by specifying position of extreme points and position of 2 control points.CubicBezierCurve2D(Point2D p1, Point2D ctrl1, Point2D ctrl2, Point2D p2)Build a new Bezier curve of degree 3 by specifying position of extreme points and position of 2 control points.CubicBezierCurve2D(Point2D p1, Vector2D v1, Point2D p2, Vector2D v2)Build a new Bezier curve of degree 3 by specifying position and tangent of first and last points.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method and Description booleanalmostEquals(GeometricObject2D obj, double eps)Checks if the two objects are similar up to a given threshold value.java.awt.geom.GeneralPathappendPath(java.awt.geom.GeneralPath path)Append the path of the curve to the given path.Polyline2DasPolyline(int n)Converts this continuous curve to an instance of LinearCurve2D with the given number of edges.Box2DboundingBox()Returns the approximate bounding box of this curve.CurveSet2D<? extends CubicBezierCurve2D>clip(Box2D box)Clip the Bezier curve by a box.CubicBezierCurve2Dclone()Deprecated.not necessary to clone immutable objects (0.11.2)booleancontains(double x, double y)Checks if the shape contains the planar point defined by (x,y).booleancontains(Point2D p)Checks if the shape contains the given point.static CubicBezierCurve2Dcreate(Point2D p1, Point2D c1, Point2D c2, Point2D p2)Deprecated.since 0.11.1static CubicBezierCurve2Dcreate(Point2D p1, Vector2D v1, Point2D p2, Vector2D v2)Deprecated.since 0.11.1doublecurvature(double t)Returns the curvature of the Curve.doubledistance(double x, double y)Compute approximated distance, computed on a polyline.doubledistance(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.booleanequals(java.lang.Object obj)Point2DfirstPoint()Returns the first point of the curve.Point2DgetControl1()Point2DgetControl2()Point2DgetCtrlP1()Point2DgetCtrlP2()java.awt.geom.GeneralPathgetGeneralPath()Point2DgetP1()Point2DgetP2()double[][]getParametric()Returns the matrix of parametric representation of the line.doublegetT0()Deprecated.replaced by t0() (since 0.11.1).doublegetT1()Deprecated.replaced by t1() (since 0.11.1).java.util.Collection<Point2D>intersections(LinearShape2D line)Use approximation, by replacing Bezier curve with a polyline.booleanisBounded()Returns true, a cubic Bezier Curve is always bounded.booleanisClosed()The cubic curve is never closed.booleanisEmpty()Returns true if the shape does not contain any point.booleanisInside(Point2D pt)Returns true if the point is 'inside' the domain bounded by the curve.Point2DlastPoint()Returns the last point of the curve.Point2Dpoint(double t)Returns the point located at the given position on the curve.doubleposition(Point2D point)Computes position by approximating cubic spline with a polyline.doubleproject(Point2D point)Computes position by approximating cubic spline with a polyline.CubicBezierCurve2Dreverse()Returns the Bezier curve given by control points taken in reverse order.doublesignedDistance(double x, double y)The same as distanceSigned(Point2D), but by passing 2 double as arguments.doublesignedDistance(Point2D point)Returns the signed distance of the curve to the given point.CubicBezierCurve2DsubCurve(double t0, double t1)Computes portion of BezierCurve.doublet0()returns 0, as Bezier curve is parameterized between 0 and 1.doublet1()Returns 1, as Bezier curve is parameterized between 0 and 1.Vector2Dtangent(double t)Returns the tangent of the curve at the given position.CubicBezierCurve2Dtransform(AffineTransform2D trans)Returns the Bezier Curve transformed by the given AffineTransform2D.doublewindingAngle(Point2D point)Use winding angle of approximated polyline-
Methods inherited from class math.geom2d.curve.AbstractSmoothCurve2D
isSingular, leftTangent, normal, rightTangent, singularPoints, smoothPieces, vertices
-
Methods inherited from class math.geom2d.curve.AbstractContinuousCurve2D
asAwtShape, continuousCurves, draw
-
Methods inherited from class java.lang.Object
getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface math.geom2d.curve.SmoothCurve2D
normal
-
Methods inherited from interface math.geom2d.curve.ContinuousCurve2D
leftTangent, rightTangent, smoothPieces
-
Methods inherited from interface math.geom2d.curve.Curve2D
asAwtShape, continuousCurves, draw, isSingular, singularPoints, vertices
-
-
-
-
Constructor Detail
-
CubicBezierCurve2D
public CubicBezierCurve2D()
-
CubicBezierCurve2D
public CubicBezierCurve2D(double[][] coefs)
Build a new Bezier curve from its array of coefficients. The array must have size 2*4.- Parameters:
coefs- the coefficients of the CubicBezierCurve2D.
-
CubicBezierCurve2D
public CubicBezierCurve2D(Point2D p1, Point2D ctrl1, Point2D ctrl2, Point2D p2)
Build a new Bezier curve of degree 3 by specifying position of extreme points and position of 2 control points. The resulting curve is totally contained in the convex polygon formed by the 4 control points.- Parameters:
p1- first pointctrl1- first control pointctrl2- second control pointp2- last point
-
CubicBezierCurve2D
public CubicBezierCurve2D(Point2D p1, Vector2D v1, Point2D p2, Vector2D v2)
Build a new Bezier curve of degree 3 by specifying position and tangent of first and last points.- Parameters:
p1- first pointv1- first tangent vectorp2- position of last pointv2- last tangent vector
-
CubicBezierCurve2D
public CubicBezierCurve2D(double x1, double y1, double xctrl1, double yctrl1, double xctrl2, double yctrl2, double x2, double y2)Build a new Bezier curve of degree 3 by specifying position of extreme points and position of 2 control points. The resulting curve is totally containe in the convex polygon formed by the 4 control points.
-
-
Method Detail
-
create
@Deprecated public static final CubicBezierCurve2D create(Point2D p1, Point2D c1, Point2D c2, Point2D p2)
Deprecated. since 0.11.1
-
create
@Deprecated public static final CubicBezierCurve2D create(Point2D p1, Vector2D v1, Point2D p2, Vector2D v2)
Deprecated. since 0.11.1
-
getControl1
public Point2D getControl1()
-
getControl2
public Point2D getControl2()
-
getP1
public Point2D getP1()
-
getP2
public Point2D getP2()
-
getCtrlP1
public Point2D getCtrlP1()
-
getCtrlP2
public Point2D getCtrlP2()
-
getParametric
public double[][] getParametric()
Returns the matrix of parametric representation of the line. Result has the form :[ x0 dx dx2 dx3][ y0 dy dy2 dy3]Coefficients are from the parametric equation : x(t) = x0 + dx*t + dx2*t^2 + dx3*t^3 y(t) = y0 + dy*t + dy2*t^2 + dy3*t^3
-
windingAngle
public double windingAngle(Point2D point)
Use winding angle of approximated polyline- Specified by:
windingAnglein interfaceOrientedCurve2D- Parameters:
point- a point of the plane- Returns:
- a signed angle
- See Also:
OrientedCurve2D.windingAngle(Point2D)
-
isInside
public boolean isInside(Point2D pt)
Returns true if the point is 'inside' the domain bounded by the curve. Uses a polyline approximation.- Specified by:
isInsidein interfaceOrientedCurve2D- Parameters:
pt- a point in the plane- Returns:
- true if the point is on the left side of the curve.
-
signedDistance
public double signedDistance(Point2D point)
Description copied from interface:OrientedCurve2DReturns 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:
signedDistancein interfaceOrientedCurve2D- Parameters:
point- a point of the plane- Returns:
- the signed distance to the curve
-
signedDistance
public double signedDistance(double x, double y)Description copied from interface:OrientedCurve2DThe same as distanceSigned(Point2D), but by passing 2 double as arguments.- Specified by:
signedDistancein interfaceOrientedCurve2D- Parameters:
x- x-coord of a pointy- y-coord of a point- Returns:
- the signed distance of the point (x,y) to the curve
- See Also:
OrientedCurve2D.signedDistance(Point2D)
-
tangent
public Vector2D tangent(double t)
Description copied from interface:SmoothCurve2DReturns the tangent of the curve at the given position.- Specified by:
tangentin interfaceSmoothCurve2D- 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 the curvature of the Curve.- Specified by:
curvaturein interfaceContinuousCurve2D- Parameters:
t- the position on the curve- Returns:
- the curvature of the curve for position t
-
isClosed
public boolean isClosed()
The cubic curve is never closed.- Specified by:
isClosedin interfaceContinuousCurve2D
-
asPolyline
public Polyline2D asPolyline(int n)
Description copied from class:AbstractContinuousCurve2DConverts 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:
asPolylinein interfaceContinuousCurve2D- Overrides:
asPolylinein classAbstractContinuousCurve2D- Parameters:
n- the number of line segments- Returns:
- a polyline with
nline segments. - See Also:
ContinuousCurve2D.asPolyline(int)
-
t0
public double t0()
returns 0, as Bezier curve is parameterized between 0 and 1.
-
getT0
@Deprecated public double getT0()
Deprecated. replaced by t0() (since 0.11.1).
-
t1
public double t1()
Returns 1, as Bezier curve is parameterized between 0 and 1.
-
getT1
@Deprecated public double getT1()
Deprecated. replaced by t1() (since 0.11.1).
-
intersections
public java.util.Collection<Point2D> intersections(LinearShape2D line)
Use approximation, by replacing Bezier curve with a polyline.- Specified by:
intersectionsin interfaceCurve2D- See Also:
Curve2D.intersections(math.geom2d.line.LinearShape2D)
-
point
public Point2D point(double t)
Description copied from interface:Curve2DReturns the point located at the given position on 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:
pointin interfaceCurve2D- See Also:
Curve2D.point(double)
-
firstPoint
public Point2D firstPoint()
Returns the first point of the curve.- Specified by:
firstPointin interfaceCurve2D- Overrides:
firstPointin classAbstractContinuousCurve2D- Returns:
- the first point of the curve
- See Also:
Curve2D.t0(),Curve2D.point(double)
-
lastPoint
public Point2D lastPoint()
Returns the last point of the curve.- Specified by:
lastPointin interfaceCurve2D- Overrides:
lastPointin classAbstractContinuousCurve2D- Returns:
- the last point of the curve.
- See Also:
Curve2D.t1(),Curve2D.point(double)
-
position
public double position(Point2D point)
Computes position by approximating cubic spline with a polyline.- Specified by:
positionin interfaceCurve2D- Parameters:
point- a point belonging to the curve- Returns:
- the position of the point on the curve
- See Also:
Curve2D.point(double)
-
project
public double project(Point2D point)
Computes position by approximating cubic spline with a polyline.
-
reverse
public CubicBezierCurve2D reverse()
Returns the Bezier curve given by control points taken in reverse order.- Specified by:
reversein interfaceContinuousCurve2D- Specified by:
reversein interfaceCurve2D- Specified by:
reversein interfaceSmoothCurve2D- Specified by:
reversein interfaceContinuousOrientedCurve2D- Specified by:
reversein interfaceOrientedCurve2D
-
subCurve
public CubicBezierCurve2D subCurve(double t0, double t1)
Computes portion of BezierCurve. If t1- Specified by:
subCurvein interfaceContinuousCurve2D- Specified by:
subCurvein interfaceCurve2D- Specified by:
subCurvein interfaceSmoothCurve2D- Specified by:
subCurvein interfaceContinuousOrientedCurve2D- Parameters:
t0- position of the start of the sub-curvet1- position of the end of the sub-curve- Returns:
- the portion of original curve comprised between t0 and t1.
-
contains
public boolean contains(double x, double y)Description copied from interface:Shape2DChecks if the shape contains the planar point defined by (x,y).
-
contains
public boolean contains(Point2D p)
Description copied from interface:Shape2DChecks if the shape contains the given point.
-
distance
public double distance(Point2D p)
Description copied from interface:Shape2DReturns 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:
distancein interfaceShape2D- See Also:
Shape2D.distance(Point2D)
-
distance
public double distance(double x, double y)Compute approximated distance, computed on a polyline.- Specified by:
distancein interfaceShape2D- See Also:
Shape2D.distance(double, double)
-
isBounded
public boolean isBounded()
Returns true, a cubic Bezier Curve is always bounded.
-
isEmpty
public boolean isEmpty()
Description copied from interface:Shape2DReturns true if the shape does not contain any point. This is the case for example for PointSet2D without any point.
-
clip
public CurveSet2D<? extends CubicBezierCurve2D> clip(Box2D box)
Clip the Bezier curve by a box. Return a set of CubicBezierCurve2D.- Specified by:
clipin interfaceContinuousCurve2D- Specified by:
clipin interfaceCurve2D- Specified by:
clipin interfaceSmoothCurve2D- Specified by:
clipin interfaceContinuousOrientedCurve2D- Specified by:
clipin interfaceOrientedCurve2D- Specified by:
clipin interfaceShape2D- Parameters:
box- the clipping box- Returns:
- the clipped shape
-
boundingBox
public Box2D boundingBox()
Returns the approximate bounding box of this curve. Actually, computes the bounding box of the set of control points.- Specified by:
boundingBoxin interfaceShape2D- Returns:
- the bounding box of the shape.
-
transform
public CubicBezierCurve2D transform(AffineTransform2D trans)
Returns the Bezier Curve transformed by the given AffineTransform2D. This is simply done by transforming control points of the curve.- Specified by:
transformin interfaceContinuousCurve2D- Specified by:
transformin interfaceCurve2D- Specified by:
transformin interfaceSmoothCurve2D- Specified by:
transformin interfaceContinuousOrientedCurve2D- Specified by:
transformin interfaceOrientedCurve2D- Specified by:
transformin interfaceShape2D- 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:ContinuousCurve2DAppend the path of the curve to the given path.- Specified by:
appendPathin interfaceContinuousCurve2D- Parameters:
path- a path to modify- Returns:
- the modified path
-
getGeneralPath
public java.awt.geom.GeneralPath getGeneralPath()
-
almostEquals
public boolean almostEquals(GeometricObject2D obj, double eps)
Description copied from interface:GeometricObject2DChecks 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:
almostEqualsin interfaceGeometricObject2D- Parameters:
obj- the object to compareeps- 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 obj)
- Overrides:
equalsin classjava.lang.Object
-
clone
@Deprecated public CubicBezierCurve2D clone()
Deprecated. not necessary to clone immutable objects (0.11.2)- Specified by:
clonein interfaceCurve2D- Specified by:
clonein classAbstractSmoothCurve2D
-
-
DMelt 3.0 © DataMelt by jWork.ORG
You see the box below because you did not login.