107
105
#define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */
110
QWT_EXPORT double qwtGetMin(const double *array, int size);
111
QWT_EXPORT double qwtGetMax(const double *array, int size);
115
inline int qwtSign(double x)
108
QWT_EXPORT double qwtGetMin( const double *array, int size );
109
QWT_EXPORT double qwtGetMax( const double *array, int size );
112
\brief Compare 2 values, relative to an interval
114
Values are "equal", when :
115
\f$\cdot value2 - value1 <= abs(intervalSize * 10e^{-6})\f$
117
\param value1 First value to compare
118
\param value2 Second value to compare
119
\param intervalSize interval size
121
\return 0: if equal, -1: if value2 > value1, 1: if value1 > value2
123
inline int qwtFuzzyCompare( double value1, double value2, double intervalSize )
125
const double eps = qAbs( 1.0e-6 * intervalSize );
127
if ( value2 - value1 > eps )
130
if ( value1 - value2 > eps )
137
inline bool qwtFuzzyGreaterOrEqual( double d1, double d2 )
139
return ( d1 >= d2 ) || qFuzzyCompare( d1, d2 );
142
inline bool qwtFuzzyLessOrEqual( double d1, double d2 )
144
return ( d1 <= d2 ) || qFuzzyCompare( d1, d2 );
148
inline int qwtSign( double x )
125
158
//! Return the square of a number
126
inline double qwtSqr(const double x)
132
\brief Limit a value to fit into a specified interval
134
\param x1 First interval boundary
135
\param x2 Second interval boundary
138
T qwtLim(const T& x, const T& x1, const T& x2)
143
xmin = qwtMin(x1, x2);
144
xmax = qwtMax(x1, x2);
156
inline QPoint qwtPolar2Pos(const QPoint &pole,
157
double radius, double angle)
159
const double x = pole.x() + radius * ::cos(angle);
160
const double y = pole.y() - radius * ::sin(angle);
162
return QPoint(qRound(x), qRound(y));
165
inline QPoint qwtDegree2Pos(const QPoint &pole,
166
double radius, double angle)
168
return qwtPolar2Pos(pole, radius, angle / 180.0 * M_PI);
171
inline QwtDoublePoint qwtPolar2Pos(const QwtDoublePoint &pole,
172
double radius, double angle)
174
const double x = pole.x() + radius * ::cos(angle);
175
const double y = pole.y() - radius * ::sin(angle);
177
return QPoint(qRound(x), qRound(y));
180
inline QwtDoublePoint qwtDegree2Pos(const QwtDoublePoint &pole,
181
double radius, double angle)
183
return qwtPolar2Pos(pole, radius, angle / 180.0 * M_PI);
186
//! Rounding of doubles, like qRound for integers
187
inline double qwtRound(double value)
189
return ::floor(value + 0.5); // MSVC has no ::round().
159
inline double qwtSqr( double x )
164
//! Like qRound, but without converting the result to an int
165
inline double qwtRoundF(double d)
167
return ::floor( d + 0.5 );
170
//! Like qFloor, but without converting the result to an int
171
inline double qwtFloorF(double d)
176
//! Like qCeil, but without converting the result to an int
177
inline double qwtCeilF(double d)