summaryrefslogtreecommitdiffstats
path: root/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
diff options
context:
space:
mode:
authorLorn Potter <lorn.potter@nokia.com>2012-02-17 14:00:27 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-21 05:46:26 +0100
commitf276cad6329ab9741b035760b033a0a272577bfd (patch)
treedc55218c0ac6e496da22ec701fe7c3162928939a /src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
parentaf7bddb5dd6c41c05d4182dd36b0cf4a1718ac54 (diff)
optimize some gestures more. stop colliding.
Change-Id: I77580905f460e87cc796df66f5cdf02156b7cca6 Reviewed-by: Lorn Potter <lorn.potter@nokia.com>
Diffstat (limited to 'src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp')
-rw-r--r--src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp59
1 files changed, 22 insertions, 37 deletions
diff --git a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
index 93e147ad..676b42ae 100644
--- a/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
+++ b/src/plugins/sensorgestures/qtsensors/qwhipsensorgesturerecognizer.cpp
@@ -42,23 +42,10 @@
#include "qwhipsensorgesturerecognizer.h"
-#define _USE_MATH_DEFINES
#include <QtCore/qmath.h>
-#ifndef M_PI
-#define M_PI 3.14159265358979323846264338327950288419717
-#endif
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923
-#endif
-
QT_BEGIN_NAMESPACE
-inline qreal calcYaw(double Ax, double Ay, double Az)
-{
- return (float)qAtan2(Az, (qSqrt(Ax * Ax + Ay * Ay)));
-}
-
QWhipSensorGestureRecognizer::QWhipSensorGestureRecognizer(QObject *parent) :
QSensorGestureRecognizer(parent), whipIt(0), lastX(0),
detectedX(0)
@@ -119,10 +106,17 @@ bool QWhipSensorGestureRecognizer::isActive()
return active;
}
-#define WHIP_THRESHOLD_FACTOR 0.95 //37
+#define WHIP_THRESHOLD_FACTOR 0.85 //37
#define WHIP_DETECTION_FACTOR 0.3 // 11.7
+
#define WHIP_DEGREES 25
+#define WHIP_Y_DEGREES 15
+#define WHIP_DEGREES_BELOW
+
+#define RADIANS_TO_DEGREES 57.2957795
+
+
void QWhipSensorGestureRecognizer::accelChanged()
{
qreal x = accel->reading()->x();
@@ -133,21 +127,26 @@ void QWhipSensorGestureRecognizer::accelChanged()
qreal y = accel->reading()->y();
qreal z = accel->reading()->z();
- qreal degreesZ = calc(calcYaw(x,y,z));
+ qreal roll = qAtan(x / qSqrt(y*y + z*z)) * RADIANS_TO_DEGREES;
+
+ QOrientationReading::Orientation currentOrientation = orientation->reading()->orientation();
if (whipIt) {
- if (((!wasNegative && difference > accelRange * WHIP_THRESHOLD_FACTOR)
- || (wasNegative && difference < -accelRange * WHIP_THRESHOLD_FACTOR))
- && qAbs(degreesZ) < WHIP_DEGREES) {
+
+ if (currentOrientation == QOrientationReading::TopUp
+ && roll > WHIP_Y_DEGREES
+ && ((!wasNegative && qAbs(detectedX - x) > accelRange * WHIP_THRESHOLD_FACTOR)
+ || (wasNegative && detectedX - x > (accelRange * WHIP_THRESHOLD_FACTOR))) ) {
Q_EMIT whip();
Q_EMIT detected("whip");
whipIt = false;
+ timer->stop();
}
-
- } else if (((difference > 0 && difference < accelRange * WHIP_DETECTION_FACTOR)
- || (difference < 0 && difference > -accelRange * WHIP_DETECTION_FACTOR))
- && qAbs(degreesZ) < WHIP_DEGREES
- && orientation->reading()->orientation() != QOrientationReading::FaceUp) {
+ } else if (!timer->isActive()
+ && currentOrientation == QOrientationReading::TopUp
+ && roll < -WHIP_Y_DEGREES
+ && ((difference > accelRange * WHIP_DETECTION_FACTOR)
+ || (difference < -accelRange * WHIP_DETECTION_FACTOR))) {
detectedX = x;
// start of gesture
timer->start();
@@ -165,18 +164,4 @@ void QWhipSensorGestureRecognizer::timeout()
whipIt = false;
}
-qreal QWhipSensorGestureRecognizer::calc(qreal yrot)
-{
- qreal aG = 1 * sin(yrot);
- qreal aK = 1 * cos(yrot);
-
- yrot = qAtan2(aG, aK);
- if (yrot > M_PI_2)
- yrot = M_PI - yrot;
- else if (yrot < -M_PI_2)
- yrot = -(M_PI + yrot);
-
- return yrot * 180 / M_PI;
-}
-
QT_END_NAMESPACE