diff options
| author | a1xd <[email protected]> | 2020-07-30 17:07:35 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-07-30 17:07:35 -0400 |
| commit | e8417a29fb2153ea035a757f36bfa300cf8b480d (patch) | |
| tree | 802905bbf262196678e140463150e66d0a674b01 /common/accel-power.hpp | |
| parent | Merge remote-tracking branch 'downstream/Inheritance' into st-refactor (diff) | |
| download | rawaccel-e8417a29fb2153ea035a757f36bfa300cf8b480d.tar.xz rawaccel-e8417a29fb2153ea035a757f36bfa300cf8b480d.zip | |
add tweaks for st-refactor
Diffstat (limited to 'common/accel-power.hpp')
| -rw-r--r-- | common/accel-power.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/common/accel-power.hpp b/common/accel-power.hpp new file mode 100644 index 0000000..c8b12cd --- /dev/null +++ b/common/accel-power.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <math.h> + +#include "accel-base.hpp" + +namespace rawaccel { + + /// <summary> Struct to hold power (non-additive) acceleration implementation. </summary> + struct accel_power : accel_base { + double exponent; + double offset; + + accel_power(accel_args args) { + verify(args); + + speed_coeff = args.power_scale; + exponent = args.exponent; + offset = args.offset; + } + + inline double accelerate(double speed) const { + // f(x) = (mx)^k + return (offset > 0 && speed < 1) ? 1 : pow(speed * speed_coeff, exponent); + } + + void verify(accel_args args) const { + if (args.power_scale < 0) error("scale can not be negative"); + if (args.exponent <= 0) error("exponent must be greater than 0"); + } + }; + +} |