diff options
| author | Jacob Palecki <[email protected]> | 2020-09-02 21:13:18 -0700 |
|---|---|---|
| committer | Jacob Palecki <[email protected]> | 2020-09-02 21:13:18 -0700 |
| commit | 0b50f9c85568e5b8b6ee32e40990e39cfdf515b5 (patch) | |
| tree | f921f780360640e3bedf676e076496f5ff821163 | |
| parent | Merge remote-tracking branch 'upstream/master' into master (diff) | |
| download | rawaccel-0b50f9c85568e5b8b6ee32e40990e39cfdf515b5.tar.xz rawaccel-0b50f9c85568e5b8b6ee32e40990e39cfdf515b5.zip | |
Start adding gain offsets
| -rw-r--r-- | common/accel-base.hpp | 3 | ||||
| -rw-r--r-- | common/accel-linear.hpp | 11 | ||||
| -rw-r--r-- | 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 { /// <summary> Struct to hold linear acceleration implementation. </summary> 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); } |