Change classic, natural, naturalgain to use gain offset

This commit is contained in:
Jacob Palecki 2020-09-03 13:21:45 -07:00
parent 0b50f9c855
commit c7e9641e86
3 changed files with 15 additions and 6 deletions

View file

@ -10,14 +10,20 @@ namespace rawaccel {
struct classic_impl {
double accel;
double power;
double power_inc;
double offset;
double multiplicative_const;
classic_impl(const accel_args& args) :
accel(args.accel), power(args.exponent - 1)
{}
accel(args.accel), power(args.exponent - 1), offset(args.offset) {
multiplicative_const = pow(accel, power);
power_inc = power + 1;
}
inline double operator()(double speed) const {
//f(x) = (mx)^(k-1)
return pow(accel * speed, power);
double base_speed = speed + offset;
return multiplicative_const * pow(speed, power_inc) / base_speed;
}
};

View file

@ -10,16 +10,18 @@ namespace rawaccel {
struct natural_impl {
double rate;
double limit;
double offset;
natural_impl(const accel_args& args) :
rate(args.accel), limit(args.limit - 1)
rate(args.accel), limit(args.limit - 1), offset(args.offset)
{
rate /= limit;
}
inline double operator()(double speed) const {
// f(x) = k(1-e^(-mx))
return limit - (limit * exp(-rate * speed));
double base_speed = speed + offset;
return limit * (1 - ((exp(-rate * speed) * speed + offset) / base_speed));
}
};

View file

@ -18,8 +18,9 @@ namespace rawaccel {
return 0;
}
double base_speed = speed + offset;
double scaled_speed = rate * speed;
return limit * (((exp(-scaled_speed) - 1) / scaled_speed) + 1);
return limit * (((exp(-scaled_speed) - 1) / (base_speed * rate) ) + 1 - offset / base_speed);
}
};