Answers:
老实说,我不知道这有多有效,但是一种实现方法是使用c ++模板:
顺序是k,t是结结构,x是所需的值。
template <int k>
real BSpline(real x, real *t)
{
if (*t <= x && x < *(t+k))
{
real a = (x - *t) / (*(t+k-1) - *t);
real b = (*(t+k) - x) / (*(t+k) - *(t+1));
return a * BSpline<k-1>(x, t) + b * BSpline<k-1>(x, (t+1));
}
else
return 0;
};
template <>
real BSpline<1>(real x, real *t)
{
if (*t <= x && x < *(t+1))
return 1.;
else
return 0.;
};