struct Bilin_interp { Int m,n; const MatDoub &y; Linear_interp x1terp, x2terp; Bilin_interp(VecDoub_I &x1v, VecDoub_I &x2v, MatDoub_I &ym) : m(x1v.size()), n(x2v.size()), y(ym), x1terp(x1v,x1v), x2terp(x2v,x2v) {} Doub interp(Doub x1p, Doub x2p) { Int i,j; Doub yy, t, u; i = x1terp.cor ? x1terp.hunt(x1p) : x1terp.locate(x1p); j = x2terp.cor ? x2terp.hunt(x2p) : x2terp.locate(x2p); t = (x1p-x1terp.xx[i])/(x1terp.xx[i+1]-x1terp.xx[i]); u = (x2p-x2terp.xx[j])/(x2terp.xx[j+1]-x2terp.xx[j]); yy = (1.-t)*(1.-u)*y[i][j] + t*(1.-u)*y[i+1][j] + (1.-t)*u*y[i][j+1] + t*u*y[i+1][j+1]; return yy; } }; struct Poly2D_interp { Int m,n,mm,nn; const MatDoub &y; VecDoub yv; Poly_interp x1terp, x2terp; Poly2D_interp(VecDoub_I &x1v, VecDoub_I &x2v, MatDoub_I &ym, Int mp, Int np) : m(x1v.size()), n(x2v.size()), mm(mp), nn(np), y(ym), yv(m), x1terp(x1v,yv,mm), x2terp(x2v,x2v,nn) {} Doub interp(Doub x1p, Doub x2p) { Int i,j,k; i = x1terp.cor ? x1terp.hunt(x1p) : x1terp.locate(x1p); j = x2terp.cor ? x2terp.hunt(x2p) : x2terp.locate(x2p); for (k=i;k srp; Spline2D_interp(VecDoub_I &x1v, VecDoub_I &x2v, MatDoub_I &ym) : m(x1v.size()), n(x2v.size()), y(ym), yv(m), x1(x1v), srp(m) { for (Int i=0;i=0;i--) { ansy=t*ansy+((c[i][3]*u+c[i][2])*u+c[i][1])*u+c[i][0]; ansy2=t*ansy2+(3.0*c[i][3]*u+2.0*c[i][2])*u+c[i][1]; ansy1=u*ansy1+(3.0*c[3][i]*t+2.0*c[2][i])*t+c[1][i]; } ansy1 /= d1; ansy2 /= d2; }