summaryrefslogtreecommitdiff
path: root/common/accel_power.cpp
blob: f1045543d42974035df1b18f92b4cd30b9b41c39 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#pragma once

#define _USE_MATH_DEFINES
#include <math.h>

#include "accel_types.hpp"

namespace rawaccel {
	inline accel_power::accel_power(accel_args args)
		: accel_implentation(args)
        { curve_constant_two++; }

	inline double accel_power::accelerate(double speed) {
		// f(x) = (mx)^k - 1
		// The subtraction of 1 occurs with later addition of 1 in mind, 
		// so that the input vector is directly multiplied by (mx)^k (if unweighted)
		return (offset > 0 && speed < 1) ? 0 : pow(speed * curve_constant_one, curve_constant_two) - 1;
	}

	inline void accel_power::verify(accel_args args) {
		accel_implentation::verify(args);
		if (args.lim_exp <= 0) error("exponent must be greater than 0");
	}
}