51 return (T(0) < val) - (val < T(0));
58 return (T(0) <= val) - (val < T(0));
71 const T expo(
const T &value,
const T &e)
73 T x = constrain(value, (T) - 1, (T) 1);
74 T ec = constrain(e, (T) 0, (T) 1);
75 return (1 - ec) * x + ec * x * x * x;
90 const T superexpo(
const T &value,
const T &e,
const T &g)
92 T x = constrain(value, (T) - 1, (T) 1);
93 T gc = constrain(g, (T) 0, (T) 0.99);
94 return expo(x, e) * (1 - gc) / (1 - fabsf(x) * gc);
112 const T deadzone(
const T &value,
const T &dz)
114 T x = constrain(value, (T) - 1, (T) 1);
115 T dzc = constrain(dz, (T) 0, (T) 0.99);
117 T out = (x - sign(x) * dzc) / (1 - dzc);
119 return out * (fabsf(x) > dzc);
123 const T expo_deadzone(
const T &value,
const T &e,
const T &dz)
125 return expo(deadzone(value, dz), e);
139 const T gradual(
const T &value,
const T &x_low,
const T &x_high,
const T &y_low,
const T &y_high)
144 }
else if (value > x_high) {
149 T a = (y_high - y_low) / (x_high - x_low);
150 T b = y_low - a * x_low;
151 return a * value + b;
176 const T expontialFromLimits(
const T &X_in,
const T &Y_min,
const T &Y_mid,
const T &Y_max)
178 const T delta = (T)0.001;
180 T X = math::constrain(X_in, (T)0, (T)2);
182 bool use_linear_approach =
false;
184 if (((Y_max + Y_min) * (T)0.5) - Y_mid < delta) {
185 use_linear_approach =
true;
190 if (use_linear_approach) {
192 float slope = -(Y_max - Y_min) / (T)2.0;
193 Y_out = slope * X + Y_max;
197 T a = -((Y_mid - Y_max) * (Y_mid - Y_max))
198 / ((T)2.0 * Y_mid - Y_max - Y_min);
200 T b = (Y_mid - c) / a;
201 Y_out = a * powf(b, X) + c;
205 return constrain(Y_out, Y_min, Y_max);
Limiting / constrain helper functions.
Definition: LowPassFilter2p.cpp:40