diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2017-01-12 18:02:45 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2017-02-27 17:04:47 +0000 |
commit | 11e6a62957433843816b41ad11fada7ca8eab85c (patch) | |
tree | 22baca117d83825ef1596cb7abb9874309fda2c0 /src | |
parent | 7692448da626e803a05344e6ef31ecac9cc5b460 (diff) | |
download | qtlocation-11e6a62957433843816b41ad11fada7ca8eab85c.tar.gz |
Use qRadiansToDegrees() and qDegreesToRadians() more widely
They document intent more clearly (and replace *two* local hand-rolled
versions of each). Also kill an extraneous #include of <math.h>; and
switch to qmath.h as source for M_PI, replacing the M_PID value (and
friends) previously provided by (thankfully private)
qlocationutils_p.h (at more precision than even long double would
retain - qmath.h's M_PI is entirely sufficient even for long double,
as is the Linux <math.h> one).
Task-number: QTBUG-58083
Change-Id: I6fa4abd3c8ed9c826998f2cdc2aefc51681c19c1
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/location/declarativemaps/qdeclarativecirclemapitem.cpp | 7 | ||||
-rw-r--r-- | src/positioning/qdoublematrix4x4.cpp | 6 | ||||
-rw-r--r-- | src/positioning/qgeocoordinate.cpp | 42 | ||||
-rw-r--r-- | src/positioning/qlocationutils_p.h | 14 | ||||
-rw-r--r-- | src/positioning/qwebmercator.cpp | 5 | ||||
-rw-r--r-- | src/positioning/qwebmercator_p.h | 1 |
6 files changed, 25 insertions, 50 deletions
diff --git a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp index 89b139c8..a4eee272 100644 --- a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp +++ b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp @@ -40,7 +40,7 @@ #include "qwebmercator_p.h" #include <QtLocation/private/qgeomap_p.h> -#include <cmath> +#include <qmath.h> #include <algorithm> #include <QtCore/QScopedValueRollback> @@ -128,11 +128,6 @@ QT_BEGIN_NAMESPACE \image api-mapcircle.png */ -#ifdef M_PI -#undef M_PI -#endif -#define M_PI 3.14159265358979323846264338327950288 - static const int CircleSamples = 128; struct Vertex diff --git a/src/positioning/qdoublematrix4x4.cpp b/src/positioning/qdoublematrix4x4.cpp index bca38075..76e1252b 100644 --- a/src/positioning/qdoublematrix4x4.cpp +++ b/src/positioning/qdoublematrix4x4.cpp @@ -508,7 +508,7 @@ void QDoubleMatrix4x4::rotate(double angle, double x, double y, double z) s = 0.0; c = -1.0; } else { - double a = angle * M_PI / 180.0; + double a = qDegreesToRadians(angle); c = std::cos(a); s = std::sin(a); } @@ -614,7 +614,7 @@ void QDoubleMatrix4x4::projectedRotate(double angle, double x, double y, double s = 0.0; c = -1.0; } else { - double a = angle * M_PI / 180.0; + double a = qDegreesToRadians(angle); c = std::cos(a); s = std::sin(a); } @@ -778,7 +778,7 @@ void QDoubleMatrix4x4::perspective(double verticalAngle, double aspectRatio, dou // Construct the projection. QDoubleMatrix4x4 m(1); - double radians = (verticalAngle / 2.0) * M_PI / 180.0; + double radians = qDegreesToRadians(verticalAngle / 2.0); double sine = std::sin(radians); if (sine == 0.0) return; diff --git a/src/positioning/qgeocoordinate.cpp b/src/positioning/qgeocoordinate.cpp index 8d39a62e..b0d9fc0f 100644 --- a/src/positioning/qgeocoordinate.cpp +++ b/src/positioning/qgeocoordinate.cpp @@ -45,26 +45,12 @@ #include <QDataStream> #include <QDebug> #include <qnumeric.h> - -#include <math.h> - -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif +#include <qmath.h> QT_BEGIN_NAMESPACE static const double qgeocoordinate_EARTH_MEAN_RADIUS = 6371.0072; -inline static double qgeocoordinate_degToRad(double deg) -{ - return deg * M_PI / 180; -} -inline static double qgeocoordinate_radToDeg(double rad) -{ - return rad * 180 / M_PI; -} - QGeoCoordinatePrivate::QGeoCoordinatePrivate(): lat(qQNaN()), @@ -430,15 +416,15 @@ qreal QGeoCoordinate::distanceTo(const QGeoCoordinate &other) const } // Haversine formula - double dlat = qgeocoordinate_degToRad(other.d->lat - d->lat); - double dlon = qgeocoordinate_degToRad(other.d->lng - d->lng); + double dlat = qDegreesToRadians(other.d->lat - d->lat); + double dlon = qDegreesToRadians(other.d->lng - d->lng); double haversine_dlat = sin(dlat / 2.0); haversine_dlat *= haversine_dlat; double haversine_dlon = sin(dlon / 2.0); haversine_dlon *= haversine_dlon; double y = haversine_dlat - + cos(qgeocoordinate_degToRad(d->lat)) - * cos(qgeocoordinate_degToRad(other.d->lat)) + + cos(qDegreesToRadians(d->lat)) + * cos(qDegreesToRadians(other.d->lat)) * haversine_dlon; double x = 2 * asin(sqrt(y)); return qreal(x * qgeocoordinate_EARTH_MEAN_RADIUS * 1000); @@ -462,14 +448,14 @@ qreal QGeoCoordinate::azimuthTo(const QGeoCoordinate &other) const return 0; } - double dlon = qgeocoordinate_degToRad(other.d->lng - d->lng); - double lat1Rad = qgeocoordinate_degToRad(d->lat); - double lat2Rad = qgeocoordinate_degToRad(other.d->lat); + double dlon = qDegreesToRadians(other.d->lng - d->lng); + double lat1Rad = qDegreesToRadians(d->lat); + double lat2Rad = qDegreesToRadians(other.d->lat); double y = sin(dlon) * cos(lat2Rad); double x = cos(lat1Rad) * sin(lat2Rad) - sin(lat1Rad) * cos(lat2Rad) * cos(dlon); - double azimuth = qgeocoordinate_radToDeg(atan2(y, x)) + 360.0; + double azimuth = qRadiansToDegrees(atan2(y, x)) + 360.0; double whole; double fraction = modf(azimuth, &whole); return qreal((int(whole + 360) % 360) + fraction); @@ -479,12 +465,12 @@ void QGeoCoordinatePrivate::atDistanceAndAzimuth(const QGeoCoordinate &coord, qreal distance, qreal azimuth, double *lon, double *lat) { - double latRad = qgeocoordinate_degToRad(coord.d->lat); - double lonRad = qgeocoordinate_degToRad(coord.d->lng); + double latRad = qDegreesToRadians(coord.d->lat); + double lonRad = qDegreesToRadians(coord.d->lng); double cosLatRad = cos(latRad); double sinLatRad = sin(latRad); - double azimuthRad = qgeocoordinate_degToRad(azimuth); + double azimuthRad = qDegreesToRadians(azimuth); double ratio = (distance / (qgeocoordinate_EARTH_MEAN_RADIUS * 1000.0)); double cosRatio = cos(ratio); @@ -495,8 +481,8 @@ void QGeoCoordinatePrivate::atDistanceAndAzimuth(const QGeoCoordinate &coord, double resultLonRad = lonRad + atan2(sin(azimuthRad) * sinRatio * cosLatRad, cosRatio - sinLatRad * sin(resultLatRad)); - *lat = qgeocoordinate_radToDeg(resultLatRad); - *lon = qgeocoordinate_radToDeg(resultLonRad); + *lat = qRadiansToDegrees(resultLatRad); + *lon = qRadiansToDegrees(resultLonRad); } /*! diff --git a/src/positioning/qlocationutils_p.h b/src/positioning/qlocationutils_p.h index f66179e1..75c4b7f4 100644 --- a/src/positioning/qlocationutils_p.h +++ b/src/positioning/qlocationutils_p.h @@ -51,14 +51,10 @@ // #include <QtCore/QtGlobal> -#include <math.h> +#include <math.h> // needed for non-std:: versions of functions +#include <qmath.h> #include <QtPositioning/QGeoCoordinate> -static const double M_PID = 3.14159265358979323846264338327950288; // to get more precision than float -static const double M_1_180D = 0.0055555555555555555555555555555555555555556; -static const double M_1_PID = 1.0 / M_PID; -static const double M_PI_180D = M_PID / 180.0; //0.0174532925199432954743716805978692718781530857086181640625; -static const double M_180_PID = 180.0 / M_PID; // 57.29577951308232286464772187173366546630859375 static const double offsetEpsilon = 0.0000000000001; static const double leftOffset = -180.0 + offsetEpsilon; static const double rightOffset = 180.0 - offsetEpsilon; @@ -209,12 +205,12 @@ public: inline static double radians(double degrees) { - return degrees * M_PI_180D; + return qDegreesToRadians(degrees); } inline static double degrees(double radians) { - return radians * M_180_PID; + return qRadiansToDegrees(radians); } inline static double earthMeanRadius() @@ -224,7 +220,7 @@ public: inline static double earthMeanDiameter() { - return earthMeanRadius() * 2.0 * M_PID; + return earthMeanRadius() * 2.0 * M_PI; } inline static double mercatorMaxLatitude() diff --git a/src/positioning/qwebmercator.cpp b/src/positioning/qwebmercator.cpp index da35c7d7..b8abac2b 100644 --- a/src/positioning/qwebmercator.cpp +++ b/src/positioning/qwebmercator.cpp @@ -41,8 +41,7 @@ #include "qgeocoordinate.h" #include <qnumeric.h> - -#include <cmath> +#include <qmath.h> #include "qdoublevector2d_p.h" #include "qdoublevector3d_p.h" @@ -111,7 +110,7 @@ QGeoCoordinate QWebMercator::mercatorToCoordClamped(const QDoubleVector2D &merca else if (fy > 1.0) fy = 1.0; - double lat = (180.0 / M_PI) * (2.0 * std::atan(std::exp(M_PI * (1.0 - 2.0 * fy))) - (M_PI / 2.0)); + double lat = qRadiansToDegrees(2.0 * std::atan(std::exp(M_PI * (1.0 - 2.0 * fy))) - (M_PI / 2.0)); double lng; if (fx >= 0) { diff --git a/src/positioning/qwebmercator_p.h b/src/positioning/qwebmercator_p.h index 2b8e9564..52a5e040 100644 --- a/src/positioning/qwebmercator_p.h +++ b/src/positioning/qwebmercator_p.h @@ -52,7 +52,6 @@ #include <qglobal.h> #include <QtCore/qvariant.h> -#include <math.h> #include "qpositioningglobal_p.h" QT_BEGIN_NAMESPACE |