interpolateBasisClosed function
Creates a closed basis spline interpolator.
Implementation
Interpolator<double> interpolateBasisClosed(List<double> values) {
final n = values.length;
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) {
final i = ((t % 1) * n).floor();
final localT = (t * n) % 1;
final v0 = values[(i - 1 + n) % n];
final v1 = values[i % n];
final v2 = values[(i + 1) % n];
final v3 = values[(i + 2) % n];
return basis(localT, v0, v1, v2, v3);
};
}