public class PiecewiseBicubicSplineInterpolatingFunction extends java.lang.Object implements BivariateFunction
AkimaSplineInterpolator
as the
underlying one-dimensional interpolator, which requires 5 sample points;
insufficient data will raise an exception when the
value
method is called.Modifier and Type | Field and Description |
---|---|
private double[][] |
fval
Set of cubic splines patching the whole data grid
|
private static int |
MIN_NUM_POINTS
The minimum number of points that are needed to compute the function.
|
private double[] |
xval
Samples x-coordinates
|
private double[] |
yval
Samples y-coordinates
|
Constructor and Description |
---|
PiecewiseBicubicSplineInterpolatingFunction(double[] x,
double[] y,
double[][] f) |
Modifier and Type | Method and Description |
---|---|
boolean |
isValidPoint(double x,
double y)
Indicates whether a point is within the interpolation range.
|
private int |
searchIndex(double c,
double[] val,
int offset,
int count) |
double |
value(double x,
double y)
Compute the value for the function.
|
private static final int MIN_NUM_POINTS
private final double[] xval
private final double[] yval
private final double[][] fval
public PiecewiseBicubicSplineInterpolatingFunction(double[] x, double[] y, double[][] f) throws DimensionMismatchException, NullArgumentException, NoDataException, NonMonotonicSequenceException
x
- Sample values of the x-coordinate, in increasing order.y
- Sample values of the y-coordinate, in increasing order.f
- Values of the function on every grid point. the expected number
of elements.NonMonotonicSequenceException
- if x
or y
are not
strictly increasing.NullArgumentException
- if any of the arguments are nullNoDataException
- if any of the arrays has zero length.DimensionMismatchException
- if the length of x and y don't match the row, column
height of fpublic double value(double x, double y) throws OutOfRangeException
value
in interface BivariateFunction
x
- Abscissa for which the function value should be computed.y
- Ordinate for which the function value should be computed.OutOfRangeException
public boolean isValidPoint(double x, double y)
x
- First coordinate.y
- Second coordinate.true
if (x, y) is a valid point.private int searchIndex(double c, double[] val, int offset, int count)
c
- Coordinate.val
- Coordinate samples.offset
- how far back from found value to offset for queryingcount
- total number of elements forward from beginning that will be
queriedval
corresponding to the interval containing
c
.OutOfRangeException
- if c
is out of the range defined by
the boundary values of val
.