示例#1
0
        public double FastCalculateSpline(double x)
        {
            double S = 0d;

            if (x < grid.Left || x > grid.Right)
            {
                return(0);                                  //если не лежит в отрезке то 0
            }
            int J     = grid.Find(x);
            int p     = degree - 1;
            int index = J - grid.BeginIndex;

            if (Math.Abs(x - grid.Left) < EPS)
            {
                return(C[0]);
            }
            if (Math.Abs(x - grid.Right) < EPS)
            {
                return(C.Last);
            }

            Vector b = DeBoorMethods.bsplv(x, grid, degree, J);

            for (int i = 0; i < degree && index + i < C.Length; i++)
            {
                S += C[index + i] * b[i];
            }


            return(S);
        }