ocmath_tps_eval

 

Description

This function evaluate the value of given points using thin plate spline method.

Syntax

int ocmath_tps_eval( int np, const double * px, const double * py, double * pz, ocmath_strTPS * strTPS, bool bExtrapolation = true, double dNAN = NANUM, double dTol = 1E-3 )

Parameters

np
[input] the number of points to evaluate.
px
[input] arrays contain the x coordinates of the interpolation points.
py
[input] arrays contain the y coordinates of the interpolation points.
pz
[output] the interpolant value of the given points.
strTPS
[input] the structure contains the thin plate spline interpolation coefficients.
bExtrapolation
[input] the function will perform extrapolation on the points outside of the data hull if bExtrapolation = TRUE; or assign dNAN to all the outside poins if bExtrapolation = FALSE;
dNAN
[Input] the outside points will be set to dNAN if bExtrapolation = false. It is ignored when bExtrapolation = true.
dTol
[input] If bExtrapolation = false, the polygon that outline the margin of scatter data points will be inflated by dTol. This tolerence value is useful when the margin of scatter is a straight line but some points deviate by a small amout.

Return

OE_NOERROR for successful or

OE_TPS_FIT for error caused by ocmath_tps_fit or

OE_NULL_POINTER if pointer is null.

Examples

EX1

#include <wks2mat.h>
int ocmath_tps_eval_ex1()
{
        double                     vX[]={1,2,3,4,5,6,7,8};
        double                     vY[]={8,7,6,5,4,3,2,1};
        double                     vZ[]={2,8,2,8,2,8,2,8};
        int                                nPoints = 8;
        double                     dRegularization,dSmooth  = 0;
        double                     dx,dy,dz;
        int                                nSamp = 6;
        const double  fInv = 1.0/(double)nSamp;
        ocmath_strTPS strTPS;
        ocmath_tps_initial(&strTPS);
        int nRet = ocmath_tps_fit(nPoints,vX,vY,vZ,dSmooth,&strTPS,&dRegularization);
        if(nRet <0)
                return 0;

        for(int jj = 0;jj<= nSamp; jj++ )
        {
                dy = fInv*jj;
                for(int ii = 0; ii<= nSamp; ii++)
                {
                        dx = fInv*ii;
                        if(ocmath_tps_eval(1,&dx,&dy,&dz,&strTPS) < 0)
                                return 0;
                        else
                                printf("%9.6f\t",dz);
                }
                printf("\n");
        }
        
        return 1;
}

Remark

See Also

ocmath_tps_fit

Header to Include

wks2mat.h

Reference