Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
        }