piecewise<T> function

Interpolator<T> piecewise<T>(
  1. List<T> values,
  2. Interpolator<T> interpolate(
    1. T,
    2. T
    )
)

Creates a piecewise interpolator from a list of values.

Implementation

Interpolator<T> piecewise<T>(
  List<T> values,
  Interpolator<T> Function(T, T) interpolate,
) {
  final n = values.length - 1;

  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;

    return interpolate(values[i], values[i + 1])(localT);
  };
}