Changed label
[ameter] / ameterwidget.cpp
index f2377e2..f5576ce 100644 (file)
@@ -9,7 +9,10 @@ qreal g_n = 9.80665;
 qreal a_max = 2;
 int  angle_step = 30;
 int divisions = 4;
-qreal filter_k = 0.5;
+
+// Smoothing: 0 - none, 1 - light, 2 - medium, 3 - strong
+int smoothing = 1;
+qreal smoothing_k[] = {1, 0.5, 0.25, 0.125};
 
 AMeterWidget::AMeterWidget(QWidget *parent)
     : QWidget(parent)
@@ -44,6 +47,8 @@ int AMeterWidget::setGravity(qreal g)
        return 0;
 }
 
+// This method is called on every update, keep division operations out
+
 void AMeterWidget::paintEvent(QPaintEvent *e)
 {
        QPainter paint(this);
@@ -146,6 +151,7 @@ void AMeterWidget::drawScale()
 
 bool AMeterWidget::filter(QAccelerometerReading *reading)
 {
+       qreal k = 1;
        bx = ax;
        by = ay;
        bz = az;
@@ -154,11 +160,16 @@ bool AMeterWidget::filter(QAccelerometerReading *reading)
        ay = reading->y() * r_g;
        az = reading->z() * r_g;
 
-       ax = ax * (1.0 - filter_k) + bx * filter_k;
-       ay = ay * (1.0 - filter_k) + by * filter_k;
-       az = az * (1.0 - filter_k) + bz * filter_k;
+       if (smoothing > 0 && smoothing < 4)
+       {
+               k = smoothing_k[smoothing];
+               ax = ax * k + bx * (1.0 - k);
+               ay = ay * k + by * (1.0 - k);
+               az = az * k + bz * (1.0 - k);
+       }
        
        update();
 
        return true;
 }
+