interpolateBasis function
Creates a basis spline interpolator.
Implementation
Interpolator<double> interpolateBasis(List<double> values) {
final n = values.length - 1;
double basis(double t1, double v0, double v1, double v2, double v3) {
final t2 = t1 * t1;
final t3 = t2 * t1;
return ((1 - 3 * t1 + 3 * t2 - t3) * v0 +
(4 - 6 * t2 + 3 * t3) * v1 +
(1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 +
t3 * v3) /
6;
}
return (double t) {
if (t <= 0) return values.first;
if (t >= 1) return values.last;
final i = (t * n).floor();
final localT = t * n - i;
final v0 = i > 0 ? values[i - 1] : 2 * values[i] - values[i + 1];
final v1 = values[i];
final v2 = values[i + 1];
final v3 = i < n - 1 ? values[i + 2] : 2 * values[i + 1] - values[i];
return basis(localT, v0, v1, v2, v3);
};
}