【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
2.1.22.4.3 ocmath_adjave_smooth
Contents
Description
This function performs adjacent averaging smoothing on the curve. The parameter nOption specifies the methods to handle the boundary of the data.
Syntax
int ocmath_adjave_smooth( const double * pYData, double * pYSmoothData, uint nSize, int nLeftRightPts, int nOption = EDGEPAD_NONE, bool bWeight = FALSE )
Parameters
- pYData
- [input] Pointer to data of type double to smooth
- pYSmoothData
- [output] Pointer to data of type double to receive results
- nSize
- [input] Size of dataset
- nLeftRightPts
- [input] Number of points to one side of symmetric window(left or right) of given point.
- Zero leaves the data unchanged.
- nOption
- [input] the methods to handle the boundary of data. It can take the following values:
- EDGEPAD_ZERO pad with zeros
- EDGEPAD_REFLECT pad reflect, end points are repeated such that on the left, [-1] = [0], [-2] = [1], [-3] = [2] and etc
- EDGEPAD_REPEAT pad with [0] values the left and with [nSize-1] on the right
- EDGEPAD_EXTRAPOLATE linear extrapolation
- EDGEPAD_PERIODIC pad periodic, [-1] = [nSize -1], [-2] = [nSize - 2]
- bWeight
- [input] weight smooth or not. default is not(FALSE)
Return
return OE_NOERROR for success, otherwise return OE_SMOOTHPTS_LT_ZERO
Examples
EX1
//Assume in the current graph, curve's XY data is in the first data plot. This piece //of code get the XY data of the curve from the first data plot and smooth on it. //The result is output in a new worksheet and the curve after smoothing will plot //in the original data plot with color red. void ocmath_adjave_smooth_ex1() { GraphLayer gl = Project.ActiveLayer(); if (!gl) { out_str("Active layer is not a graph."); return; } //get XY data from the first dataplot DataPlot dp = gl.DataPlots(0); DataRange dr; vector vx, vy; if(dp.GetDataRange(dr)) { DWORD dwPlotID; if(dr.GetData(DRR_GET_DEPENDENT | DRR_NO_FACTORS, 0, &dwPlotID, NULL, &vy, &vx) < 0) { printf("get data failed GetData"); return; } } vector vSmooth; vSmooth.SetSize(vy.GetSize()); ocmath_adjave_smooth(vy, vSmooth, vy.GetSize(),3); // Total of seven points considered : 3 + 1 + 3 //new a worksheet to output the result Worksheet wks; wks.Create("Smooth"); wks.SetSize(-1, 2); wks.SetColDesignations("XY"); DataRange drOut; drOut.Add("X", wks, 0, 0, -1, 0); drOut.Add("Y", wks, 0, 1, -1, 1); drOut.SetData(&vSmooth, &vx); //plot the curve after smoothing int nPlot = gl.AddPlot(drOut, IDM_PLOT_LINE); dp = gl.DataPlots(nPlot); dp.SetColor(1);//set color to red }
Remark
See Also
Header to Include
origin.h