QWT 7.0.1
Loading...
Searching...
No Matches
Classes | Public Member Functions | List of all members
QwtWeedingCurveFitter Class Reference

A curve fitter implementing Douglas and Peucker algorithm. More...

#include <qwt_weeding_curve_fitter.h>

Inheritance diagram for QwtWeedingCurveFitter:
QwtCurveFitter

Classes

class  Line
 
class  PrivateData
 

Public Member Functions

 QwtWeedingCurveFitter (double tolerance=1.0)
 Constructor.
 
virtual ~QwtWeedingCurveFitter ()
 Destructor.
 
void setTolerance (double)
 Assign the tolerance.
 
double tolerance () const
 
void setChunkSize (uint)
 Limit the number of points passed to a run of the algorithm.
 
uint chunkSize () const
 
virtual QPolygonF fitCurve (const QPolygonF &) const QWT_OVERRIDE
 
virtual QPainterPath fitCurvePath (const QPolygonF &) const QWT_OVERRIDE
 
- Public Member Functions inherited from QwtCurveFitter
virtual ~QwtCurveFitter ()
 Destructor.
 
Mode mode () const
 

Additional Inherited Members

- Public Types inherited from QwtCurveFitter
enum  Mode { Polygon , Path }
 Preferred mode of the fitting algorithm. More...
 
- Protected Member Functions inherited from QwtCurveFitter
 QwtCurveFitter (Mode mode)
 Constructor.
 

Detailed Description

A curve fitter implementing Douglas and Peucker algorithm.

The purpose of the Douglas and Peucker algorithm is that given a 'curve' composed of line segments to find a curve not too dissimilar but that has fewer points. The algorithm defines 'too dissimilar' based on the maximum distance (tolerance) between the original curve and the smoothed curve.

The runtime of the algorithm increases non linear ( worst case O( n*n ) ) and might be very slow for huge polygons. To avoid performance issues it might be useful to split the polygon ( setChunkSize() ) and to run the algorithm for these smaller parts. The disadvantage of having no interpolation at the borders is for most use cases irrelevant.

The smoothed curve consists of a subset of the points that defined the original curve.

In opposite to QwtSplineCurveFitter the Douglas and Peucker algorithm reduces the number of points. By adjusting the tolerance parameter according to the axis scales QwtSplineCurveFitter can be used to implement different level of details to speed up painting of curves of many points.

Constructor & Destructor Documentation

◆ QwtWeedingCurveFitter()

QwtWeedingCurveFitter::QwtWeedingCurveFitter ( double  tolerance = 1.0)
explicit

Constructor.

Parameters
toleranceTolerance
See also
setTolerance(), tolerance()

Member Function Documentation

◆ chunkSize()

uint QwtWeedingCurveFitter::chunkSize ( ) const
Returns
Maximum for the number of points passed to a run of the algorithm - or 0, when unlimited
See also
setChunkSize()

◆ fitCurve()

QPolygonF QwtWeedingCurveFitter::fitCurve ( const QPolygonF &  points) const
virtual
Parameters
pointsSeries of data points
Returns
Curve points
See also
fitCurvePath()

Implements QwtCurveFitter.

◆ fitCurvePath()

QPainterPath QwtWeedingCurveFitter::fitCurvePath ( const QPolygonF &  points) const
virtual
Parameters
pointsSeries of data points
Returns
Curve path
See also
fitCurve()

Implements QwtCurveFitter.

◆ setChunkSize()

void QwtWeedingCurveFitter::setChunkSize ( uint  numPoints)

Limit the number of points passed to a run of the algorithm.

The runtime of the Douglas Peucker algorithm increases non linear with the number of points. For a chunk size > 0 the polygon is split into pieces passed to the algorithm one by one.

Parameters
numPointsMaximum for the number of points passed to the algorithm
See also
chunkSize()

◆ setTolerance()

void QwtWeedingCurveFitter::setTolerance ( double  tolerance)

Assign the tolerance.

The tolerance is the maximum distance, that is acceptable between the original curve and the smoothed curve.

Increasing the tolerance will reduce the number of the resulting points.

Parameters
toleranceTolerance
See also
tolerance()

◆ tolerance()

double QwtWeedingCurveFitter::tolerance ( ) const
Returns
Tolerance
See also
setTolerance()

The documentation for this class was generated from the following files: