1 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
2  * Qwt Widget Library
3  * Copyright (C) 1997   Josef Wilgen
4  * Copyright (C) 2002   Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #include "qwt_transform.h"
11 #include "qwt_math.h"
12 
13 #if QT_VERSION < 0x040601
14 #define qExp(x) ::exp(x)
15 #endif
16 
17 #if QT_VERSION >= 0x050400
18 
19 //! Smallest allowed value for logarithmic scales: 1.0e-150
20 const double QwtLogTransform::LogMin = 1.0e-150;
21 
22 //! Largest allowed value for logarithmic scales: 1.0e150
23 const double QwtLogTransform::LogMax = 1.0e150;
24 
25 #else
26 
27 //! Smallest allowed value for logarithmic scales: 1.0e-150
28 QT_STATIC_CONST_IMPL double QwtLogTransform::LogMin = 1.0e-150;
29 
30 //! Largest allowed value for logarithmic scales: 1.0e150
31 QT_STATIC_CONST_IMPL double QwtLogTransform::LogMax = 1.0e150;
32 
33 #endif
34 
35 //! Constructor
QwtTransform()36 QwtTransform::QwtTransform()
37 {
38 }
39 
40 //! Destructor
~QwtTransform()41 QwtTransform::~QwtTransform()
42 {
43 }
44 
45 /*!
46   \param value Value to be bounded
47   \return value unmodified
48  */
bounded(double value) const49 double QwtTransform::bounded( double value ) const
50 {
51     return value;
52 }
53 
54 //! Constructor
QwtNullTransform()55 QwtNullTransform::QwtNullTransform():
56     QwtTransform()
57 {
58 }
59 
60 //! Destructor
~QwtNullTransform()61 QwtNullTransform::~QwtNullTransform()
62 {
63 }
64 
65 /*!
66   \param value Value to be transformed
67   \return value unmodified
68  */
transform(double value) const69 double QwtNullTransform::transform( double value ) const
70 {
71     return value;
72 }
73 
74 /*!
75   \param value Value to be transformed
76   \return value unmodified
77  */
invTransform(double value) const78 double QwtNullTransform::invTransform( double value ) const
79 {
80     return value;
81 }
82 
83 //! \return Clone of the transformation
copy() const84 QwtTransform *QwtNullTransform::copy() const
85 {
86     return new QwtNullTransform();
87 }
88 
89 //! Constructor
QwtLogTransform()90 QwtLogTransform::QwtLogTransform():
91     QwtTransform()
92 {
93 }
94 
95 //! Destructor
~QwtLogTransform()96 QwtLogTransform::~QwtLogTransform()
97 {
98 }
99 
100 /*!
101   \param value Value to be transformed
102   \return log( value )
103  */
transform(double value) const104 double QwtLogTransform::transform( double value ) const
105 {
106     return ::log( value );
107 }
108 
109 /*!
110   \param value Value to be transformed
111   \return exp( value )
112  */
invTransform(double value) const113 double QwtLogTransform::invTransform( double value ) const
114 {
115     return qExp( value );
116 }
117 
118 /*!
119   \param value Value to be bounded
120   \return qBound( LogMin, value, LogMax )
121  */
bounded(double value) const122 double QwtLogTransform::bounded( double value ) const
123 {
124     return qBound( LogMin, value, LogMax );
125 }
126 
127 //! \return Clone of the transformation
copy() const128 QwtTransform *QwtLogTransform::copy() const
129 {
130     return new QwtLogTransform();
131 }
132 
133 /*!
134   Constructor
135   \param exponent Exponent
136 */
QwtPowerTransform(double exponent)137 QwtPowerTransform::QwtPowerTransform( double exponent ):
138     QwtTransform(),
139     d_exponent( exponent )
140 {
141 }
142 
143 //! Destructor
~QwtPowerTransform()144 QwtPowerTransform::~QwtPowerTransform()
145 {
146 }
147 
148 /*!
149   \param value Value to be transformed
150   \return Exponentiation preserving the sign
151  */
transform(double value) const152 double QwtPowerTransform::transform( double value ) const
153 {
154     if ( value < 0.0 )
155         return -qPow( -value, 1.0 / d_exponent );
156     else
157         return qPow( value, 1.0 / d_exponent );
158 
159 }
160 
161 /*!
162   \param value Value to be transformed
163   \return Inverse exponentiation preserving the sign
164  */
invTransform(double value) const165 double QwtPowerTransform::invTransform( double value ) const
166 {
167     if ( value < 0.0 )
168         return -qPow( -value, d_exponent );
169     else
170         return qPow( value, d_exponent );
171 }
172 
173 //! \return Clone of the transformation
copy() const174 QwtTransform *QwtPowerTransform::copy() const
175 {
176     return new QwtPowerTransform( d_exponent );
177 }
178