#include <math.h> /** * Computes interpolation based on third order splines * * AUTHOR: * Jan Thorbecke (janth@xs4all.nl) * The Netherlands **/ void spline3(float x1, float x2, float z1, float z2, float dzdx1, float dzdx2, float *a, float *b, float *c, float *d) { if (x1 == x2 ) { if ((z1 == z2) && (dzdx1 == dzdx2)) { *a = 0.0; *b = 0.0; *c = dzdx1; *d = (z1 - *c*x1); } else { return; } return; } *a = (dzdx1 + dzdx2 - 2.0*(z1-z2)/(x1-x2))/((x1-x2)*(x1-x2)); *b = 0.5*(dzdx1 - dzdx2)/(x1-x2) - 1.5**a*(x1+x2); *c = (z1 - z2 - *a*(x1*x1*x1-x2*x2*x2) - *b*(x1*x1-x2*x2))/(x1-x2); *d = z1 - *a*x1*x1*x1 - *b*x1*x1 - *c*x1; return; }