91 g = e + f + f + d - c;
95 return( (
double)(0.5*g*y + b));
102 int interp(array, nx, ny, parray, npx, npy )
108 double *one, *two, *three, *four, *save, *done;
109 double *xone, *xtwo, *xthree, *xfour;
112 double oversampy, oversampx, oversamp;
114 one = (
double *)malloc( (
unsigned)(
sizeof(double) * npx));
115 two = (
double *)malloc( (
unsigned)(
sizeof(double) * npx));
116 three = (
double *)malloc( (
unsigned)(
sizeof(double) * npx));
117 four = (
double *)malloc( (
unsigned)(
sizeof(double) * npx));
119 if(!one || !two || !three || !four)
121 st_fail(
"no memory for interpolation");
127 xthree = &array[nx*2];
129 oversampy = (npy-1.0)/(ny-1.0);
130 oversampx = (npx-1.0)/(nx-1.0);
131 oversamp = oversampx < oversampy ? oversampx:oversampy;
139 if(fabs(oversamp - 1.0) < 0.001 )
141 st_report(
"interpolation not needed - oversamp is %f", oversamp );
146 xinterp( xtwo, nx, three, npx );
147 xinterp( xthree, nx, four, npx );
151 for( i=0; i< npx; i++ )
153 one[i] = two[i] - three[i] + two[i];
158 y = (double)k/oversampy;
171 xfour = &array[(iy+2)*nx];
172 xinterp( xfour, nx, four, npx );
178 four[i] = three[i] - two[i] + three[i];
185 done = &parray[npx*k];
190 done[i] =
yintpn( one[i], two[i], three[i], four[i], dy );
212 double oversamp, x, a, b, c, d,
dx;
215 oversamp = (double)(nx2-1)/(double)(nx1-1);
217 for(jx=0;jx<nx2;jx++)
222 if(fabs(x-(
double)inx) < 0.0001)
251 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)