Add PiecewiseBicubicSplineInterpolatingFunction
hondogo opened this issue · 2 comments
hondogo commented
Please add function (for multiplatform) like org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolatingFunction.
Purpose:
To be able to interpolate points for surface given by points matrix there is a need for such function.
SPC-code commented
It would be best if you could clarify what use case do you have. What input and output data formats and what additional parameters do you have. It it is quite easy to replicate CM behavior. But maybe we could do better.
hondogo commented
Here is a peace of code that uses interpolation function (Apache Commons Math implementation):
import org.apache.commons.math3.analysis.interpolation.PiecewiseBicubicSplineInterpolatingFunction
import org.apache.commons.math3.exception.OutOfRangeException
class InterpolatingSurface(
xPoints: DoubleArray,
yPoints: DoubleArray,
zPoints: Array<DoubleArray>
) : Surface {
init {
require(zPoints.size == xPoints.size)
require(zPoints.all { it.size == yPoints.size })
}
private val interpolator = PiecewiseBicubicSplineInterpolatingFunction(
/* x = */ xPoints,
/* y = */ yPoints,
/* f = */ zPoints
)
override fun z(x: Double, y: Double): Double {
return try {
interpolator.value(x, y)
} catch (_: OutOfRangeException) {
Double.NaN
}
}
}