From ccf3b83f5df39dca5b99ccaa80f5f8ba38c442bd Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 15 May 2013 07:22:44 +0200 Subject: Implement smoothing factor for Accela --- .../ftnoir_accela_filtercontrols.ui | 36 +++++++++++++++++----- ftnoir_filter_accela/ftnoir_filter_accela.cpp | 9 +++--- ftnoir_filter_accela/ftnoir_filter_accela.h | 1 + .../ftnoir_filter_accela_dialog.cpp | 6 ++-- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui index 0d41d5eb..f1f45bb5 100644 --- a/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui +++ b/ftnoir_filter_accela/ftnoir_accela_filtercontrols.ui @@ -70,16 +70,16 @@ - 4 + 6 - 6 + 8 - 191 + 127 - 75 + 57 1 @@ -126,16 +126,16 @@ - 4 + 6 - 6 + 8 - 191 + 127 - 75 + 57 1 @@ -321,6 +321,26 @@ background:none; + + + + Smoothing: + + + + + + + 0.100000000000000 + + + 100.000000000000000 + + + 1.000000000000000 + + + diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.cpp b/ftnoir_filter_accela/ftnoir_filter_accela.cpp index 543ce376..87df1ba7 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela.cpp @@ -21,8 +21,8 @@ #endif FTNoIR_Filter::FTNoIR_Filter() : - functionConfig("Accela-Scaling-Rotation", 4, 6), - translationFunctionConfig("Accela-Scaling-Translation", 4, 6) + functionConfig("Accela-Scaling-Rotation", 6, 8), + translationFunctionConfig("Accela-Scaling-Translation", 6, 8) { first_run = true; kMagicNumber = 100.0f; @@ -50,6 +50,7 @@ void FTNoIR_Filter::loadSettings() { iniFile.beginGroup ( "Accela" ); kMagicNumber = iniFile.value ( "Reduction", 100 ).toFloat(); kZoomSlowness = iniFile.value("zoom-slowness", 0).toFloat(); + kSmoothingFactor = iniFile.value("smoothing-factor", 1).toFloat(); iniFile.endGroup (); } @@ -89,13 +90,13 @@ void FTNoIR_Filter::FilterHeadPoseData(double *current_camera_position, double start = prev_output[i]; double vec = e2 - start; int sign = vec < 0 ? -1 : 1; - double x = fabs(vec); + double x = fabs(vec) / kSmoothingFactor; QList points = (i >= 3 ? functionConfig : translationFunctionConfig).getPoints(); int extrapolatep = 0; double ratio; double maxx; double add; - // extrapolation of a spline + // linear extrapolation of a spline if (points.size() > 1) { QPointF last = points[points.size() - 1]; QPointF penultimate = points[points.size() - 2]; diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.h b/ftnoir_filter_accela/ftnoir_filter_accela.h index 4c513bb3..bcb15330 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.h +++ b/ftnoir_filter_accela/ftnoir_filter_accela.h @@ -59,6 +59,7 @@ private: double kFactor, kFactorTranslation; double kSensitivity, kSensitivityTranslation; double kMagicNumber, kZoomSlowness; // Stanislaws' magic number (should be 100 according to him...) + double kSmoothingFactor; FunctionConfig functionConfig; FunctionConfig translationFunctionConfig; diff --git a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp index d2e7b1a8..3b5dbd15 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp +++ b/ftnoir_filter_accela/ftnoir_filter_accela_dialog.cpp @@ -39,8 +39,8 @@ // FilterControls::FilterControls() : QWidget(), - functionConfig("Accela-Scaling-Rotation", 4, 8), - translationFunctionConfig("Accela-Scaling-Translation", 4, 8) + functionConfig("Accela-Scaling-Rotation", 6, 8), + translationFunctionConfig("Accela-Scaling-Translation", 6, 8) { ui.setupUi( this ); @@ -156,6 +156,7 @@ void FilterControls::loadSettings() { iniFile.beginGroup ( "Accela" ); ui.slideReduction->setValue (iniFile.value ( "Reduction", 100 ).toInt()); ui.slideZoom->setValue(iniFile.value("zoom-slowness", 0).toInt()); + ui.smoothingFactor->setValue(iniFile.value("smoothing-factor", 1).toFloat()); iniFile.endGroup (); settingsDirty = false; @@ -175,6 +176,7 @@ void FilterControls::save() { iniFile.beginGroup ( "Accela" ); iniFile.setValue ( "Reduction", ui.slideReduction->value() ); iniFile.setValue("zoom-slowness", ui.slideZoom->value()); + iniFile.setValue("smoothing-factor", ui.smoothingFactor->value()); iniFile.endGroup (); functionConfig.saveSettings(iniFile); -- cgit v1.2.3