From 0b50f9c85568e5b8b6ee32e40990e39cfdf515b5 Mon Sep 17 00:00:00 2001 From: Jacob Palecki Date: Wed, 2 Sep 2020 21:13:18 -0700 Subject: Start adding gain offsets --- common/accel-base.hpp | 3 ++- common/accel-linear.hpp | 11 +++++++++-- common/accel-naturalgain.hpp | 5 +++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/common/accel-base.hpp b/common/accel-base.hpp index 560c0b5..b42f23d 100644 --- a/common/accel-base.hpp +++ b/common/accel-base.hpp @@ -36,7 +36,8 @@ namespace rawaccel { } inline double operator()(double speed) const { - return 1 + fn(maxsd(speed - offset, 0)) * weight; + double offset_speed = speed - offset; + return offset_speed > 0 ? 1 + fn(offset_speed) * weight : 1; } }; diff --git a/common/accel-linear.hpp b/common/accel-linear.hpp index a943594..95ba261 100644 --- a/common/accel-linear.hpp +++ b/common/accel-linear.hpp @@ -7,11 +7,18 @@ namespace rawaccel { /// Struct to hold linear acceleration implementation. struct linear_impl { double accel; + double offset; + double subtractive_const; + double divisive_const; - linear_impl(const accel_args& args) : accel(args.accel) {} + linear_impl(const accel_args& args) : accel(args.accel), offset(args.offset) { + subtractive_const = 2 * accel * offset; + divisive_const = accel * offset * offset; + } inline double operator()(double speed) const { - return accel * speed; + double base_speed = speed + offset; + return accel * base_speed - subtractive_const + divisive_const / base_speed; } }; diff --git a/common/accel-naturalgain.hpp b/common/accel-naturalgain.hpp index 646b2bb..03d749f 100644 --- a/common/accel-naturalgain.hpp +++ b/common/accel-naturalgain.hpp @@ -13,6 +13,11 @@ namespace rawaccel { inline double operator()(double speed) const { // f(x) = k((e^(-mx)-1)/mx + 1) + if (speed <= 0) + { + return 0; + } + double scaled_speed = rate * speed; return limit * (((exp(-scaled_speed) - 1) / scaled_speed) + 1); } -- cgit v1.2.3