/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.surface;
import org.apache.commons.lang.Validate;
import com.opengamma.analytics.math.Axis;
import com.opengamma.analytics.math.curve.ConstantDoublesCurve;
import com.opengamma.analytics.math.curve.Curve;
import com.opengamma.analytics.math.curve.InterpolatedDoublesCurve;
import com.opengamma.analytics.math.interpolation.Interpolator1D;
/**
*
*/
public class SurfaceSliceFunction {
public ConstantDoublesCurve cut(final ConstantDoublesSurface surface, final Axis axis, final Double at) {
Validate.notNull(surface, "surface");
Validate.notNull(axis, "axis");
Validate.notNull(at, "at");
return ConstantDoublesCurve.from(surface.getZValue(null, null));
}
public static Curve<Double, Double> cut(final Surface<Double, Double, Double> surface, final Axis axis, final Double at, final Interpolator1D interpolator) {
Validate.notNull(surface, "surface");
Validate.notNull(axis, "axis");
Validate.notNull(at, "at");
if (axis == Axis.X) {
Double[] yData = surface.getYData();
int nPoints = yData.length;
Double[] zData = new Double[nPoints];
for (int i = 0; i < nPoints; i++) {
zData[i] = surface.getZValue(at, yData[i]);
}
return InterpolatedDoublesCurve.from(yData, zData, interpolator);
} else if (axis == Axis.Y) {
Double[] xData = surface.getXData();
int nPoints = xData.length;
Double[] zData = new Double[nPoints];
for (int i = 0; i < nPoints; i++) {
zData[i] = surface.getZValue(at, xData[i]);
}
return InterpolatedDoublesCurve.from(xData, zData, interpolator);
}
return null; // FIXME Need an example of how to throw exceptions.
}
}