Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef QWT_SPLINE_PARAMETRIZATION_H
00011 #define QWT_SPLINE_PARAMETRIZATION_H 1
00012
00013 #include "qwt_global.h"
00014 #include <qmath.h>
00015 #include <qpoint.h>
00016
00043 class QWT_EXPORT QwtSplineParametrization
00044 {
00045 public:
00047 enum Type
00048 {
00053 ParameterX,
00054
00059 ParameterY,
00060
00071 ParameterUniform,
00072
00081 ParameterChordal,
00082
00093 ParameterCentripetal,
00094
00095
00104 ParameterManhattan
00105 };
00106
00107 explicit QwtSplineParametrization( int type );
00108 virtual ~QwtSplineParametrization();
00109
00110 int type() const;
00111
00112 virtual double valueIncrement( const QPointF &, const QPointF & ) const;
00113
00114 static double valueIncrementX( const QPointF &, const QPointF & );
00115 static double valueIncrementY( const QPointF &, const QPointF & );
00116 static double valueIncrementUniform( const QPointF &, const QPointF & );
00117 static double valueIncrementChordal( const QPointF &, const QPointF & );
00118 static double valueIncrementCentripetal( const QPointF &, const QPointF & );
00119 static double valueIncrementManhattan( const QPointF &, const QPointF & );
00120
00121 private:
00122 const int d_type;
00123 };
00124
00133 inline double QwtSplineParametrization::valueIncrementX(
00134 const QPointF &point1, const QPointF &point2 )
00135 {
00136 return point2.x() - point1.x();
00137 }
00138
00147 inline double QwtSplineParametrization::valueIncrementY(
00148 const QPointF &point1, const QPointF &point2 )
00149 {
00150 return point2.y() - point1.y();
00151 }
00152
00161 inline double QwtSplineParametrization::valueIncrementUniform(
00162 const QPointF &point1, const QPointF &point2 )
00163 {
00164 Q_UNUSED( point1 )
00165 Q_UNUSED( point2 )
00166
00167 return 1.0;
00168 }
00169
00178 inline double QwtSplineParametrization::valueIncrementChordal(
00179 const QPointF &point1, const QPointF &point2 )
00180 {
00181 const double dx = point2.x() - point1.x();
00182 const double dy = point2.y() - point1.y();
00183
00184 return qSqrt( dx * dx + dy * dy );
00185 }
00186
00195 inline double QwtSplineParametrization::valueIncrementCentripetal(
00196 const QPointF &point1, const QPointF &point2 )
00197 {
00198 return qSqrt( valueIncrementChordal( point1, point2 ) );
00199 }
00200
00209 inline double QwtSplineParametrization::valueIncrementManhattan(
00210 const QPointF &point1, const QPointF &point2 )
00211 {
00212 return qAbs( point2.x() - point1.x() ) + qAbs( point2.y() - point1.y() );
00213 }
00214
00215 #endif