답변:
솔직히 이것이 얼마나 효율적인지 모르지만 그것을하는 한 가지 방법은 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.;
};