public static CubicBezier Interpolate(DblPoint2 Pa, DblPoint2 P0, DblPoint2 P1, DblPoint2 Pb)
 {
     var result = new CubicBezier();
       result.P0 = P0;
       result.P1 = P1;
       result.C0 = InterpolateControlPoint(Pa, P0, P1);
       result.C1 = InterpolateControlPoint(Pb, P1, P0);
       return result;
 }
        public static CubicBezier[] Interpolate(DblPoint2[] Points, DblPoint2 prePoint, DblPoint2 postPoint)
        {
            if (Points.Length < 2)
            throw new ArgumentException("Too few points to interpolate");

              var beziersNecessary = Points.Length - 1;
              var result = new CubicBezier[beziersNecessary];

              for (int i = 0; i < beziersNecessary; i++)
              {
            DblPoint2 Pa, Pb;
            if (i == 0)
              Pa = prePoint;
            else
              Pa = Points[i - 1];
            if (i == beziersNecessary - 1)
              Pb = postPoint;
            else
              Pb = Points[i + 2];
            result[i] = Interpolate(Pa, Points[i], Points[i + 1], Pb);
              }

              return result;
        }