【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.17.2.13 ocmath_check_order_multiple_curves
Contents
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