import java.awt.*;
import java.awt.geom.*;
import java.util.*;

public class Hermite {
    double[] coeffs, y;
    double[][] input;
    int N;

    public Hermite(double[][] in) {
	input = in;
	N = input.length - 1;
	coeffs = new double[2*N+2];
	coeffs[0] = input[0][1];
	coeffs[1] = input[0][2];
	y = new double[2*N+2];
	for (int i = 0; i <= N; i++) {
	    double x = input[i][0];
	    y[2*i] = x;
	    y[2*i+1] = x;
	}

	double[] dd = new double[2*N+1];
	dd[0] = coeffs[1];
	for (int i = 1; i <= N; i++) {
	    dd[2*i-1] = (input[i][1] - input[i-1][1])/
		(input[i][0] - input[i-1][0]);
	    dd[2*i] = input[i][2];
	}
	
	for (int k = 2; k <= 2*N+1; k++) {
	    double[] ee = new double[dd.length-1];
	    for (int j = 0; j < dd.length-1; j++) {
		ee[j] = (dd[j+1] - dd[j])/(y[j+k]-y[j]);
	    } 
	    dd = ee;
	    coeffs[k] = dd[0];
	}
    }

    public double valueAt(double x) {
	double value = coeffs[coeffs.length-1];
	for (int i = coeffs.length-2; i >= 0; i--) {
	    value = coeffs[i] + (x-y[i])*value;
	} 
	return value;
    }
}

	
