diff options
-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; |