Qwt User's Guide
svn
|
00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- ***************************** 00002 * Qwt Widget Library 00003 * Copyright (C) 1997 Josef Wilgen 00004 * Copyright (C) 2002 Uwe Rathmann 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the Qwt License, Version 1.0 00008 *****************************************************************************/ 00009 00011 #ifndef _QWT_POINT_POLAR_H_ 00012 #define _QWT_POINT_POLAR_H_ 1 00013 00014 #include "qwt_global.h" 00015 #include "qwt_math.h" 00016 #include <qpoint.h> 00017 #ifndef QT_NO_DEBUG_STREAM 00018 #include <qdebug.h> 00019 #endif 00020 00028 class QWT_EXPORT QwtPointPolar 00029 { 00030 public: 00031 QwtPointPolar(); 00032 QwtPointPolar( double azimuth, double radius ); 00033 QwtPointPolar( const QwtPointPolar & ); 00034 QwtPointPolar( const QPointF & ); 00035 00036 void setPoint( const QPointF & ); 00037 QPointF toPoint() const; 00038 00039 bool isValid() const; 00040 bool isNull() const; 00041 00042 double radius() const; 00043 double azimuth() const; 00044 00045 double &rRadius(); 00046 double &rAzimuth(); 00047 00048 void setRadius( double ); 00049 void setAzimuth( double ); 00050 00051 bool operator==( const QwtPointPolar & ) const; 00052 bool operator!=( const QwtPointPolar & ) const; 00053 00054 QwtPointPolar normalized() const; 00055 00056 private: 00057 double d_azimuth; 00058 double d_radius; 00059 }; 00060 00065 inline QwtPointPolar::QwtPointPolar(): 00066 d_azimuth( 0.0 ), 00067 d_radius( 0.0 ) 00068 { 00069 } 00070 00077 inline QwtPointPolar::QwtPointPolar( double azimuth, double radius ): 00078 d_azimuth( azimuth ), 00079 d_radius( radius ) 00080 { 00081 } 00082 00087 inline QwtPointPolar::QwtPointPolar( const QwtPointPolar &other ): 00088 d_azimuth( other.d_azimuth ), 00089 d_radius( other.d_radius ) 00090 { 00091 } 00092 00094 inline bool QwtPointPolar::isValid() const 00095 { 00096 return d_radius >= 0.0; 00097 } 00098 00100 inline bool QwtPointPolar::isNull() const 00101 { 00102 return d_radius == 0.0; 00103 } 00104 00106 inline double QwtPointPolar::radius() const 00107 { 00108 return d_radius; 00109 } 00110 00112 inline double QwtPointPolar::azimuth() const 00113 { 00114 return d_azimuth; 00115 } 00116 00118 inline double &QwtPointPolar::rRadius() 00119 { 00120 return d_radius; 00121 } 00122 00124 inline double &QwtPointPolar::rAzimuth() 00125 { 00126 return d_azimuth; 00127 } 00128 00130 inline void QwtPointPolar::setRadius( double radius ) 00131 { 00132 d_radius = radius; 00133 } 00134 00136 inline void QwtPointPolar::setAzimuth( double azimuth ) 00137 { 00138 d_azimuth = azimuth; 00139 } 00140 00141 #ifndef QT_NO_DEBUG_STREAM 00142 QWT_EXPORT QDebug operator<<( QDebug, const QwtPointPolar & ); 00143 #endif 00144 00145 inline QPoint qwtPolar2Pos( const QPoint &pole, 00146 double radius, double angle ) 00147 { 00148 const double x = pole.x() + radius * qCos( angle ); 00149 const double y = pole.y() - radius * qSin( angle ); 00150 00151 return QPoint( qRound( x ), qRound( y ) ); 00152 } 00153 00154 inline QPoint qwtDegree2Pos( const QPoint &pole, 00155 double radius, double angle ) 00156 { 00157 return qwtPolar2Pos( pole, radius, angle / 180.0 * M_PI ); 00158 } 00159 00160 inline QPointF qwtPolar2Pos( const QPointF &pole, 00161 double radius, double angle ) 00162 { 00163 const double x = pole.x() + radius * qCos( angle ); 00164 const double y = pole.y() - radius * qSin( angle ); 00165 00166 return QPointF( x, y); 00167 } 00168 00169 inline QPointF qwtDegree2Pos( const QPointF &pole, 00170 double radius, double angle ) 00171 { 00172 return qwtPolar2Pos( pole, radius, angle / 180.0 * M_PI ); 00173 } 00174 00175 inline QPointF qwtFastPolar2Pos( const QPointF &pole, 00176 double radius, double angle ) 00177 { 00178 #if QT_VERSION < 0x040601 00179 const double x = pole.x() + radius * ::cos( angle ); 00180 const double y = pole.y() - radius * ::sin( angle ); 00181 #else 00182 const double x = pole.x() + radius * qFastCos( angle ); 00183 const double y = pole.y() - radius * qFastSin( angle ); 00184 #endif 00185 00186 return QPointF( x, y); 00187 } 00188 00189 inline QPointF qwtFastDegree2Pos( const QPointF &pole, 00190 double radius, double angle ) 00191 { 00192 return qwtFastPolar2Pos( pole, radius, angle / 180.0 * M_PI ); 00193 } 00194 00195 #endif