AcManager.Controls.OxyPlotGraphViewer.CatmullRomSplineHelper.Segment C# (CSharp) Method

Segment() private static method

private static Segment ( IList points, OxyPlot.ScreenPoint p0, OxyPlot.ScreenPoint p1, OxyPlot.ScreenPoint p2, OxyPlot.ScreenPoint p3, double alpha, double tolerance ) : void
points IList
p0 OxyPlot.ScreenPoint
p1 OxyPlot.ScreenPoint
p2 OxyPlot.ScreenPoint
p3 OxyPlot.ScreenPoint
alpha double
tolerance double
return void
            private static void Segment(IList<ScreenPoint> points, ScreenPoint p0, ScreenPoint p1, ScreenPoint p2, ScreenPoint p3, double alpha,
                    double tolerance) {
                if (Equals(p1, p2)) {
                    points.Add(p1);
                    return;
                }

                if (Equals(p0, p1)) {
                    p0 = Prev(p1, p2);
                }

                if (Equals(p2, p3)) {
                    p3 = Prev(p2, p1);
                }

                var t0 = 0d;
                var t1 = GetT(t0, p0, p1, alpha);
                var t2 = GetT(t1, p1, p2, alpha);
                var t3 = GetT(t2, p2, p3, alpha);
                
                var iterations = (int)((Math.Abs(p1.X - p2.X) + Math.Abs(p1.Y - p2.Y)) / tolerance);
                for (var t = t1; t < t2; t += (t2 - t1) / iterations) {
                    var a1 = Sum(Mult((t1 - t) / (t1 - t0), p0), Mult((t - t0) / (t1 - t0), p1));
                    var a2 = Sum(Mult((t2 - t) / (t2 - t1), p1), Mult((t - t1) / (t2 - t1), p2));
                    var a3 = Sum(Mult((t3 - t) / (t3 - t2), p2), Mult((t - t2) / (t3 - t2), p3));

                    var b1 = Sum(Mult((t2 - t) / (t2 - t0), a1), Mult((t - t0) / (t2 - t0), a2));
                    var b2 = Sum(Mult((t3 - t) / (t3 - t1), a2), Mult((t - t1) / (t3 - t1), a3));

                    var c1 = Sum(Mult((t2 - t) / (t2 - t1), b1), Mult((t - t1) / (t2 - t1), b2));
                    points.Add(c1);
                }
            }
OxyPlotGraphViewer.CatmullRomSplineHelper