public CubicBezierEquation(Point startPoint, CubicBezierSegment segment) { _startPoint = startPoint; _controlPoint1 = segment.ControlPoint1; _controlPoint2 = segment.ControlPoint2; _endPoint = segment.EndPoint; }
public static Point SplitByNextIntersection(Point startPoint, CubicBezierSegment segment, out SegmentBase segment1, out SegmentBase segment2) { return SplitByNextIntersection(startPoint, segment, out segment1, out segment2, new CubicBezierEquation(startPoint, segment), (t, p) => { var a = Mid(startPoint, segment.ControlPoint1, t); var b = Mid(segment.ControlPoint1, segment.ControlPoint2, t); return new CubicBezierSegment(a, Mid(a, b, t), p); }, t => { var b = Mid(segment.ControlPoint1, segment.ControlPoint2, t); var c = Mid(segment.ControlPoint2, segment.EndPoint, t); return new CubicBezierSegment(Mid(b, c, t), c, segment.EndPoint); }); }
public static List<Point> Approximate(Point startPoint, CubicBezierSegment segment) { return Approximate(new CubicBezierEquation(startPoint, segment).GetPoint, startPoint, segment.EndPoint); }