diff options
author | Lincoln Ramsay <lincoln.ramsay@nokia.com> | 2011-03-14 13:42:24 +1000 |
---|---|---|
committer | Lincoln Ramsay <lincoln.ramsay@nokia.com> | 2011-03-15 09:22:11 +1000 |
commit | c7685a6d5b794c2e648c4e9ad851f6d60e9c2552 (patch) | |
tree | d9588b307e23ac94412420608129b62796728027 | |
parent | a671bf1882c752b6381f70d0a62621781c1b6940 (diff) |
Report tiny values as 0
This prevents rounding errors caused by the use of floating point
values.
-rw-r--r-- | src/ui/accelerometercontrol.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/ui/accelerometercontrol.cpp b/src/ui/accelerometercontrol.cpp index 1a65afc..1ab7434 100644 --- a/src/ui/accelerometercontrol.cpp +++ b/src/ui/accelerometercontrol.cpp @@ -45,8 +45,11 @@ static QVector3D accelerometerY(0, 1, 0); static QVector3D accelerometerZ(0, 0, -1); static QVector3D unrotatedGravity(0, 1, 0); +static const double kEarthGravity = 9.8; +static const double kZero = 1e-4; + AccelerometerControl::AccelerometerControl(QWidget *parent) - : QGLWidget(parent), mGravity(9.8) + : QGLWidget(parent), mGravity(kEarthGravity) { } @@ -307,6 +310,10 @@ QVector3D AccelerometerControl::value() const newValue.setX(QVector3D::dotProduct(mRotation.conjugate().rotatedVector(accelerometerX), unrotatedGravity)); newValue.setY(QVector3D::dotProduct(mRotation.conjugate().rotatedVector(accelerometerY), unrotatedGravity)); newValue.setZ(QVector3D::dotProduct(mRotation.conjugate().rotatedVector(accelerometerZ), unrotatedGravity)); + // remove rounding errors + if (qAbs(newValue.x()) < kZero) newValue.setX(0); + if (qAbs(newValue.y()) < kZero) newValue.setY(0); + if (qAbs(newValue.z()) < kZero) newValue.setZ(0); newValue *= mGravity; return newValue; |