24 static float yintpn(a, b, c, d, y)
34 g = e + f + f + d - c;
38 return( (
float)(0.5*g*y + b));
46 int interp(array, nx, ny, parray, npx, npy )
52 float *one, *two, *three, *four, *save, *done;
53 float *xone, *xtwo, *xthree, *xfour;
56 double oversampy, oversampx, oversamp;
58 one = (
float *)malloc( (
unsigned)(
sizeof(float) * npx));
59 two = (
float *)malloc( (
unsigned)(
sizeof(float) * npx));
60 three = (
float *)malloc( (
unsigned)(
sizeof(float) * npx));
61 four = (
float *)malloc( (
unsigned)(
sizeof(float) * npx));
63 if( !one || !two || !three || !four ) {
64 fprintf( stderr,
"no memory for interpolation\n");
70 xthree = &array[nx*2];
72 oversampy = (npy-1.0)/(ny-1.0);
73 oversampx = (npx-1.0)/(nx-1.0);
74 oversamp = oversampx < oversampy ? oversampx:oversampy;
83 if(fabs(oversamp - 1.0) < 0.001 ) {
84 fprintf(stderr,
"interpolation not needed - oversamp is %f\n", oversamp );
89 xinterp( xtwo, nx, three, npx );
90 xinterp( xthree, nx, four, npx );
95 for( i=0; i< npx; i++ )
96 one[i] = two[i] - three[i] + two[i];
98 for( k = 0; k<npy; k++ ) {
100 y = (double)k/oversampy;
112 xfour = &array[(iy+2)*nx];
113 xinterp( xfour, nx, four, npx );
115 for( i=0; i< npx; i++ )
116 four[i] = three[i] - two[i] + three[i];
120 done = &parray[npx*k];
123 for( i=0 ; i<npx; i++ )
124 done[i] =
yintpn( one[i], two[i], three[i], four[i], dy );
140 static int xinterp(x1, nx1, x2, nx2)
146 float oversamp, x, a, b, c, d,
dx;
149 oversamp = (float)(nx2-1)/(float)(nx1-1);
150 for( jx=0; jx<nx2; jx++ ) {
153 if(fabs(x-(
float)inx) < 0.0001)
170 x2[jx]=
yintpn(a, b, c, d, dx);
int interp(double *array, int nx, int ny, double *parray, int npx, int npy)
int xinterp(double *x1, int nx1, double *x2, int nx2)
double yintpn(double a, double b, double c, double d, double y)