summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLincoln Ramsay <lincoln.ramsay@nokia.com>2011-03-14 13:42:24 +1000
committerLincoln Ramsay <lincoln.ramsay@nokia.com>2011-03-15 09:22:11 +1000
commitc7685a6d5b794c2e648c4e9ad851f6d60e9c2552 (patch)
treed9588b307e23ac94412420608129b62796728027
parenta671bf1882c752b6381f70d0a62621781c1b6940 (diff)
Report tiny values as 0
This prevents rounding errors caused by the use of floating point values.
-rw-r--r--src/ui/accelerometercontrol.cpp9
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;