package edu.stanford.rsl.conrad.fitting; import java.io.Serializable; /** * Class to describe an abstract surface that can be fitted to a set of 3D Points. * * @author Marco Boegel * */ public abstract class Surface implements Serializable { /** * */ private static final long serialVersionUID = -91840779787161332L; protected boolean fittingDone = false; protected int numberOfParameters = 0; public abstract double [] getParametersAsDoubleArray(); /** * Fits the function to the given input data * @param x the input data * @param y the output data */ public abstract void fitToPoints(double [] x, double [] y, double [] z); public void fitToPoints(float []x, float []y, float [] z){ double [] dx = new double[x.length]; double [] dy = new double[y.length]; double [] dz = new double[z.length]; for (int i= 0; i < x.length; i++){ dx[i]= x[i]; dy[i]= y[i]; dz[i]= z[i]; } fitToPoints(dx, dy, dz); } /** * Evaluates the function at position x,y * @param x the position * @param y the position * @return the output value */ public abstract double evaluate(double x, double y, double z); public abstract String toString(); public abstract int getMinimumNumberOfCorrespondences(); public static Surface[] getAvailableSurfaces(){ Surface [] revan = {new Quadric()}; return revan; } /** * @return the numberOfParameters */ public int getNumberOfParameters() { return numberOfParameters; } }