2.1.17.2.13 ocmath_check_order_multiple_curves
Description
Check all curves's X value's monotonic and consistent state.
Syntax
int ocmath_check_order_multiple_curves( UINT nSize, const OneCurveData * pCurves, int nSegments = 3, double * pMeanInc = NULL, double * pSDInc = NULL, int * pSegSize = NULL, double dProb = 0.8 )
Parameters
- nSize
- [input] number of curves and should > 1.
- pCurves
- [input] pointer to structures that must be filled with pointers to input curves data.
- nSegments
- [input] number of parts that the curve should be divided when call ocmath_check_order_curve.
- it can equal to 1 and its default value is 3.
- pMeanInc
- [output] if not NULL, pointer to all curves each part's mean increment, its
- size should be equal to nSegments * nSize and the jth part's
- mean increment of ith curve is pMeanInc[(i - 1) * nSegments + j -1].
- Its default value is NULL.
- pSDInc
- [output] if not NULL, pointer to all curves each part's standard deviation
- of increment array, its size should be equal to nSegments * nSize. and
- the jth part's standard deviation f increment array of ith curve
- is pSDInc[(i - 1) * nSegments + j - 1]. Its default value is NULL.
- pSegSize
- [output] if not NULL, pointer to all curves each part's size, its size should
- be equal to nSegments * nSize. and the jth part's size of ith
- curve is pSegSize[(i - 1) * nSegments + j - 1]. Its default value is NULL.
- dProb
- [input] detail info please check ocmath_check_order_curve, its default value is 0.8.
Return
if succeed, return MCO_MONO_CONSISTENT if monotonic and consistent,
return MCO_MONO_NOT_CONSISTENT if not monotonic but consistent,
return MCO_NOT_CONSISTENT if curves are not consistent;
orthewise, negetive error code is returned.
Examples
EX1
//This example assume the active window is a graph with at least two curves.
void ocmath_check_order_multi_curves_ex1()
{
GraphLayer gl = Project.ActiveLayer();
if (!gl)
{
return;
}
int nPlots = gl.DataPlots.Count();
int ii;
int nAveSize = 0;
OneCurveData* multiCurveData = (OneCurveData*) malloc(sizeof(OneCurveData)*nPlots);
double* xx;
double* yy;
for(ii = 0; ii < nPlots; ii++)
{
DataPlot dp = gl.DataPlots(ii);
DataRange dr;
vector vDatax, vDatay;
if(dp.GetDataRange(dr))
{
DWORD dwPlotID;
if(dr.GetData(DRR_GET_DEPENDENT | DRR_NO_FACTORS, 0, &dwPlotID, NULL, &vDatay, &vDatax) < 0)
{
printf("get_plot_data failed GetData");
return;
}
}
nAveSize = vDatay.GetSize();
xx = (double*) malloc (sizeof(double) * nAveSize);
yy = (double*) malloc (sizeof(double) * nAveSize);
memcpy(xx, vDatax, sizeof(double)*nAveSize);
memcpy(yy, vDatay, sizeof(double)*nAveSize);
multiCurveData[ii].nSize = nAveSize;
multiCurveData[ii].pX = xx;
multiCurveData[ii].pY = yy;
}
int nSegments = 3;
vector vSDInc(nPlots * nSegments);
vector<int> vSegSize(nPlots * nSegments);
int nRet = ocmath_check_order_multiple_curves(nPlots, multiCurveData, nSegments, vSDInc, NULL, vSegSize);
switch(nRet)
{
case MCO_MONO_CONSISTENT:
printf("monotonic and consistent");
break;
case MCO_MONO_NOT_CONSISTENT:
printf("not monotonic but consistent");
break;
case MCO_NOT_CONSISTENT:
printf("not consistent");
break;
default:
printf("failed: error code is %d", nRet);
break;
}
return;
}
Remark
This function checks all curves's X value are monotonic and consistent, not monotonic
but consistent or not consistent by check each curve use ocmath_check_order_curve.
Number of curves should more than 1. If only one curve, please use ocmath_check_order_curve.
It can handle that the curve has some outliers.
See Also
ocmath_check_order_curve, ocmath_check_order
Header to Include
origin.h
Reference
|