Class BezierCurve

  • All Implemented Interfaces:
    Shape

    public class BezierCurve
    extends java.lang.Object
    implements Shape
    Represents a Bezier curve.
    Since:
    5.5.6
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.util.List<Point2D> controlPoints  
      static double curveCollinearityEpsilon
      If the distance between a point and a line is less than this constant, then we consider the point lies on the line.
      static double distanceToleranceManhattan
      The Manhattan distance is used in the case when either the line ((x1, y1), (x4, y4)) passes through both (x2, y2) and (x3, y3) or (x1, y1) = (x4, y4).
      static double distanceToleranceSquare
      In the case when neither the line ((x1, y1), (x4, y4)) passes through both (x2, y2) and (x3, y3) nor (x1, y1) = (x4, y4) we use the square of the sum of the distances mentioned below in compare to this field as the criterion of good approximation.
    • Constructor Summary

      Constructors 
      Constructor Description
      BezierCurve​(java.util.List<Point2D> controlPoints)
      Constructs new bezier curve.
    • Field Detail

      • curveCollinearityEpsilon

        public static double curveCollinearityEpsilon
        If the distance between a point and a line is less than this constant, then we consider the point lies on the line.
      • distanceToleranceSquare

        public static double distanceToleranceSquare
        In the case when neither the line ((x1, y1), (x4, y4)) passes through both (x2, y2) and (x3, y3) nor (x1, y1) = (x4, y4) we use the square of the sum of the distances mentioned below in compare to this field as the criterion of good approximation. 1. The distance between the line and (x2, y2) 2. The distance between the line and (x3, y3)
      • distanceToleranceManhattan

        public static double distanceToleranceManhattan
        The Manhattan distance is used in the case when either the line ((x1, y1), (x4, y4)) passes through both (x2, y2) and (x3, y3) or (x1, y1) = (x4, y4). The essential observation is that when the curve is a uniform speed straight line from end to end, the control points are evenly spaced from beginning to end. Our measure of how far we deviate from that ideal uses distance of the middle controls: point 2 should be halfway between points 1 and 3; point 3 should be halfway between points 2 and 4.
      • controlPoints

        private final java.util.List<Point2D> controlPoints
    • Constructor Detail

      • BezierCurve

        public BezierCurve​(java.util.List<Point2D> controlPoints)
        Constructs new bezier curve.
        Parameters:
        controlPoints - Curve's control points.
    • Method Detail

      • getBasePoints

        public java.util.List<Point2D> getBasePoints()
        Treat base points as the points which are enough to construct a shape. E.g. for a bezier curve they are control points, for a line segment - the start and the end points of the segment.
        Specified by:
        getBasePoints in interface Shape
        Returns:
        Ordered List consisting of shape's base points.
      • recursiveApproximation

        private void recursiveApproximation​(double x1,
                                            double y1,
                                            double x2,
                                            double y2,
                                            double x3,
                                            double y3,
                                            double x4,
                                            double y4,
                                            java.util.List<Point2D> points)