ИСХОДНЫЙ КОД ДЛЯ ОЦЕНКИ СПЛАЙНА
Для оценки представления сплайна ФР [5], содержащей запись типа 3, может быть использован следующий фрагмент кода:
// Оценить B-сплайн функцию k-ой степени для значения t.
// Значение t находится между вершинами j и j + 1.
// Функция является рекурсивной.
double B(const unsigned int j, const unsigned int k, const double t)
{
(k == 0)
return (knots[j] <= t && t < knots[j+1]) ? 1.0: 0.0;
const double c1 = (knots [j+k] == knots [j]) ? 0: (t - knots [j]) / (knots [j+k] - knots[j]);
const double c2 = (knots [j+k+1] == knots[j+1]) ? 0: (knots [j+k+1] - t) / (knots [j+k+1]
- knots[j+1]);
return c1*B(j, k-1, t) + c2*B(j+1, k-1, t);
}
// линейный поиск по возрастающим вершинам для интервала, содержащего значение t
unsigned int i = 0;
for ( ; knots[i+1] <= t; i++ );
//дан интервал, вычислить значение сплайна при данном значении t
double value = 0.0;
for ( unsigned int j = i - k ; j <= i ; j++)
value += x[j+1] * B(j, k, t);
(справочное)