- unsigned int scaleNX = static_cast<unsigned int> (ix / dXScale);\r
- unsigned int scaleNY = static_cast<unsigned int> (iy / dYScale);\r
- vResult[ix][iy] = vReal[scaleNX][scaleNY];\r
- if (result.isComplex()) {\r
- if (isComplex())\r
- vResultImag[ix][iy] = vImag[scaleNX][scaleNY];\r
- else\r
- vResultImag[ix][iy] = 0;\r
+ double dXPos = ix / dXScale;\r
+ double dYPos = iy / dYScale;\r
+ unsigned int scaleNX = static_cast<unsigned int> (dXPos);\r
+ unsigned int scaleNY = static_cast<unsigned int> (dYPos);\r
+ double dXFrac = dXPos - scaleNX;\r
+ double dYFrac = dYPos - scaleNY;\r
+ if (scaleNX >= nx - 1 || scaleNY >= ny - 1) {\r
+ vResult[ix][iy] = vReal[scaleNX][scaleNY];\r
+ if (result.isComplex()) {\r
+ if (isComplex())\r
+ vResultImag[ix][iy] = vImag[scaleNX][scaleNY];\r
+ else\r
+ vResultImag[ix][iy] = 0;\r
+ }\r
+ } else {\r
+ vResult[ix][iy] = vReal[scaleNX][scaleNY] + \r
+ dXFrac * (vReal[scaleNX+1][scaleNY] - vReal[scaleNX][scaleNY]) + \r
+ dYFrac * (vReal[scaleNX][scaleNY+1] - vReal[scaleNX][scaleNY]);\r
+ if (result.isComplex()) {\r
+ if (isComplex())\r
+ vResultImag[ix][iy] = vImag[scaleNX][scaleNY] + \r
+ dXFrac * (vImag[scaleNX+1][scaleNY] - vImag[scaleNX][scaleNY]) + \r
+ dYFrac * (vImag[scaleNX][scaleNY+1] - vImag[scaleNX][scaleNY]);\r
+ else\r
+ vResultImag[ix][iy] = 0;\r
+ }\r