private IList <Point> BezierHull0(IList <Point> bezier) { var cps = BezierExtensions.ControlPoints(bezier); var hull = PolyAlgoPrototyper.AndrewsMonotonChainHullSSF(cps, false); if (hull[0] != bezier[0]) { var extend = new Point[hull.Length + 2]; Array.Copy(hull, 0, extend, 1, hull.Length); extend[0] = bezier[0]; extend[extend.Length - 1] = bezier[bezier.Count - 1]; hull = extend; } return(hull); }
public void TestBezierHull(IList <Point> bezier) { base.ReportPainter.PushPaint(c => { c.SetColor(Colors.Blue); c.SetLineWidth(2); ContextPainterExtensions.DrawBezier(c, bezier); c.Stroke(); }); var cps = BezierExtensions.ControlPoints(bezier); base.ReportPainter.PushPaint(c => { c.SetColor(Colors.Red); c.SetLineWidth(1); foreach (var p in cps) { c.Arc(p.X, p.Y, 5, 0, 360); c.Stroke(); } ; }); var hull = BezierExtensions.BezierHull(bezier); base.ReportPainter.PushPaint(c => { c.SetColor(Colors.Green); c.SetLineWidth(1); foreach (var p in hull) { c.Arc(p.X, p.Y, 3, 0, 360); c.Fill(); } ContextPainterExtensions.DrawPoligon(c, hull); c.Stroke(); }); WritePainter(); }