From e8417a29fb2153ea035a757f36bfa300cf8b480d Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Thu, 30 Jul 2020 17:07:35 -0400 Subject: add tweaks for st-refactor --- common/accel-sigmoid.hpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 common/accel-sigmoid.hpp (limited to 'common/accel-sigmoid.hpp') diff --git a/common/accel-sigmoid.hpp b/common/accel-sigmoid.hpp new file mode 100644 index 0000000..e992e0c --- /dev/null +++ b/common/accel-sigmoid.hpp @@ -0,0 +1,32 @@ +#pragma once + +#include + +#include "accel-base.hpp" + +namespace rawaccel { + + /// Struct to hold sigmoid (s-shaped) acceleration implementation. + struct accel_sigmoid : accel_base { + double limit = 1; + double midpoint = 0; + + accel_sigmoid(accel_args args) : accel_base(args) { + verify(args); + + limit = args.limit - 1; + midpoint = args.midpoint; + } + + inline double accelerate(double speed) const { + //f(x) = k/(1+e^(-m(c-x))) + return limit / (exp(-speed_coeff * (speed - midpoint)) + 1); + } + + void verify(accel_args args) const { + if (args.limit <= 1) error("exponent must be greater than 1"); + if (args.midpoint < 0) error("midpoint must not be negative"); + } + }; + +} -- cgit v1.2.3