nearestInterpolation function
A function providing the nearest value of a discrete monotonically
increasing set of sample points xs
and ys
.
Implementation
UnaryFunction<double> nearestInterpolation({
required Vector<double> xs,
required Vector<double> ys,
bool preferLower = true,
}) {
checkPoints(DataType.float,
xs: xs, ys: ys, min: 1, ordered: true, unique: true);
return (double x) {
if (x <= xs.getUnchecked(0)) {
return ys.getUnchecked(0);
} else if (xs.getUnchecked(xs.count - 1) <= x) {
return ys.getUnchecked(ys.count - 1);
}
final index = DataType.float.comparator
.binarySearchLeft(xs, x)
.clamp(1, xs.count - 1);
final distanceLo = x - xs.getUnchecked(index - 1);
final distanceHi = xs.getUnchecked(index) - x;
if (distanceLo < distanceHi || (distanceLo == distanceHi && preferLower)) {
return ys.getUnchecked(index - 1);
} else {
return ys.getUnchecked(index);
}
};
}