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 From b3ed8fd4e4fcad0b749126dee62588260d74b106 Mon Sep 17 00:00:00 2001 From: a1xd <68629610+a1xd@users.noreply.github.com> Date: Fri, 31 Jul 2020 01:37:41 -0400 Subject: add more tweaks for st-refactor --- common/accel-sigmoid.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'common/accel-sigmoid.hpp') diff --git a/common/accel-sigmoid.hpp b/common/accel-sigmoid.hpp index e992e0c..7cfa6c4 100644 --- a/common/accel-sigmoid.hpp +++ b/common/accel-sigmoid.hpp @@ -11,7 +11,7 @@ namespace rawaccel { double limit = 1; double midpoint = 0; - accel_sigmoid(accel_args args) : accel_base(args) { + accel_sigmoid(const accel_args& args) : accel_base(args) { verify(args); limit = args.limit - 1; @@ -23,7 +23,7 @@ namespace rawaccel { return limit / (exp(-speed_coeff * (speed - midpoint)) + 1); } - void verify(accel_args args) const { + void verify(const 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