interpolateBasisClosed function

Interpolator<double> interpolateBasisClosed(
  1. List<double> values
)

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);
  };
}