public static Point SplitByNextIntersection(Point startPoint, QuadraticBezierSegment segment, out SegmentBase segment1, out SegmentBase segment2)
 {
     return SplitByNextIntersection(startPoint, segment, out segment1, out segment2,
         new QuadraticBezierEquation(startPoint, segment),
         (t, p) => new QuadraticBezierSegment(Mid(startPoint, segment.ControlPoint, t), p),
         t => new QuadraticBezierSegment(Mid(segment.ControlPoint, segment.EndPoint, t), segment.EndPoint));
 }
 public static List<Point> Approximate(Point startPoint, QuadraticBezierSegment segment)
 {
     return Approximate(new QuadraticBezierEquation(startPoint, segment).GetPoint, startPoint, segment.EndPoint);
 }
 public QuadraticBezierEquation(Point startPoint, QuadraticBezierSegment segment)
 {
     _startPoint = startPoint;
     _controlPoint = segment.ControlPoint;
     _endPoint = segment.EndPoint;
 }