/* Function: rt_Lookup2D_Normal ============================================== * Abstract: * 2D normal lookup routine for data type of real_T */ real_T rt_Lookup2D_Normal (const real_T *xVals, const int_T numX, const real_T *yVals, const int_T numY, const real_T *zVals, const real_T x, const real_T y) { int_T xIdx, yIdx; real_T ylo, yhi; real_T Zx0yhi, Zx0ylo, xlo, xhi; real_T corner1, corner2; xIdx = rt_GetLookupIndex(xVals,numX,x); xlo = xVals[xIdx]; xhi = xVals[xIdx+1]; yIdx = rt_GetLookupIndex(yVals,numY,y); ylo = yVals[yIdx]; yhi = yVals[yIdx+1]; corner1 = *(zVals + xIdx + (numX * yIdx)); corner2 = *(zVals + (xIdx+1) + (numX * yIdx)); Zx0ylo = INTERP(x, xlo, xhi, corner1, corner2); corner1 = *(zVals + xIdx + (numX * (yIdx+1))); corner2 = *(zVals + (xIdx+1) + (numX*(yIdx+1))); Zx0yhi = INTERP(x, xlo, xhi, corner1, corner2); return (INTERP(y,ylo,yhi,Zx0ylo,Zx0yhi)); }
real_T rt_Lookup(const real_T *x, int_T xlen, real_T u, const real_T *y) { int_T idx = rt_GetLookupIndex(x, xlen, u); real_T num = y[idx+1] - y[idx]; real_T den = x[idx+1] - x[idx]; /* Due to the way the binary search is implemented in rt_look.c (rt_GetLookupIndex), den cannot be 0. Equivalently, m cannot be inf or nan. */ real_T m = num/den; return (y[idx] + m * (u - x[idx])); }