| 2.1.17.5.5 ocmath_2d_interpolate
 DescriptionThis function interpolates or extrpolates an input matrix to find Z values at given X and Y coordinates.
 Syntaxint ocmath_2d_interpolate( int nSize, double * pX, double * pY, double * pZ, UINT nRows, UINT nCols, double * pMat, double dxMin, double dxMax, double dyMin, double dyMax, int nMethod = INTERP2_NEAREST ) Parameters nSize[input] The size of pX, pY and pZ vector. pX[input] Specifies X coordinates at which the data Z is given. pY[input] Specifies Y coordinates at which the data Z is given. pZ[output] The interpolated data values. nRows[input] The number of rows. nCols[input] The number of columns. pMat[input] The input matrix with size nRows*nCols. dxMin[input] The X minimum. dxMax[input] The X maximum. dyMin[input] The Y minimum. dyMax[input] The Y maximum. nMethod[input] The interpolation methods: 
 INTERP2_NEAREST, INTERP2_BILINEAR, INTERP2_BICUBIC, INTERP2_SPLINE, INTERP2_BIQUADRATIC, INTERP2_LAGRANGE
 ReturnReturns OE_NOERROR if succeed, error codes otherwise.
 ExamplesEX1
 //Before running, make sure a matrixlayer exists and is active in current project
void ocmath_2d_interpolate_ex1(int nSize)
{
    MatrixLayer ml = Project.ActiveLayer();
    MatrixObject mo = ml.MatrixObjects(0);
    matrixbase& matbase = mo.GetDataObject();
    matrix mat = matbase;
    Matrix mA;
    mA.Attach(ml);
    int nCols = mA.GetNumCols();
    int nRows = mA.GetNumRows();
    double dxMin = mA.GetXMin();
    double dxMax = mA.GetXMax();
    double dyMin = mA.GetYMin();
    double dyMax = mA.GetYMax();
    
    vector vx,vy,vz;
    vx.Data(dxMin, dxMax, (dxMax-dxMin)/(nSize-1));
    vy.Data(dyMin, dyMax, (dyMax-dyMin)/(nSize-1));
    vz.SetSize(nSize);
    int nRet = ocmath_2d_interpolate(nSize, vx, vy, vz, nRows, nCols, mat,dxMin, dxMax, dyMin, dyMax,INTERP2_NEAREST);
    if (nRet != OE_NOERROR)
    {
        printf("Error occurs when calling ocmath function!\n");
        return
    }
    Worksheet    wksResult;
    wksResult.Create("InterResult");
    while(wksResult.Columns())
        wksResult.DeleteCol(0);
    for(int n=0; n < 3; n++)
        wksResult.AddCol();
    DataRange drOut;
    drOut.Add("X", wksResult, 0, 0, -1, 0);
    drOut.Add("Y", wksResult, 0, 1, -1, 1);
    drOut.Add("Z", wksResult, 0, 2, -1, 2);
    drOut.SetData(&vz, &vy, &vx);
}RemarkRemarks: This function interpolates or extrpolates an input matrix to find Z values at given X and Y coordinates.
 The interpolation algorithms are
 1) Nearest, direct value of pixel that the point on the line falls into;
 2) Bilinear, interpolation of 2*2 pixels around point on line
 3) Bicubic Convolution, interpolation of 4*4 pixels around point on the line
 4) Spline, cubic B-Spline interpolation.
 5) Biquadratic, quadratic interpolation of 3*3 pixels around point on line.
 6) Bicubic Lagrange, quadratic interpolation of 4*4 pixels around point on line.
 The least size of input matrix is 2*2 for Nearest, 2*2 for Bilinear, 4*4 for Bicubic Convolution, 4*4 for Spline, 3*3 for Biquadratic and 4*4 for Bicubic Lagrange;
 See Alsoocmath_interpolate, ocmath_3d_interpolate
 Header to Includeorigin.h
 Reference |