43 return fabs(a - b) < tolerance;
53 inline float Min(
float a,
float b)
55 if ( a <= b )
return a;
59 inline float Min(
float a,
float b,
float c)
61 return Min(
Min(a, b), c );
64 inline float Min(
float a,
float b,
float c,
float d)
69 inline float Min(
float a,
float b,
float c,
float d,
float e)
75 inline float Max(
float a,
float b)
77 if ( a >= b )
return a;
81 inline float Max(
float a,
float b,
float c)
86 inline float Max(
float a,
float b,
float c,
float d)
91 inline float Max(
float a,
float b,
float c,
float d,
float e)
98 inline T
Clamp(T value, T min, T max)
100 if (value < min)
return min;
101 else if (value > max)
return max;
108 if ( a < 0.0f )
return 0.0f;
109 if ( a > 1.0f )
return 1.0f;
114 inline void Swap(
int &a,
int &b)
122 inline void Swap(
float &a,
float &b)
132 inline float Mod(
float a,
float m)
134 return a - (
static_cast<int>(a / m) ) * m;
140 return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
146 return x && !(x & (x - 1));
152 double logbase2 = log(static_cast<float>(x)) /
Math::LOG_2;
153 return static_cast<int>(pow(2, ceil(logbase2)) + 0.5);
162 return PI*2.0f + angle;
168 inline bool TestAngle(
float angle,
float min,
float max)
175 return ( angle <= max || angle >= min );
177 return ( angle >= min && angle <= max );
186 return aa + p * (bb - aa);
198 if ( a+
PI*2.0f-g < g-a ) a +=
PI*2.0f;
202 if ( g+
PI*2.0f-a < a-g ) g +=
PI*2.0f;
219 if ( fabs(value) <= dead )
225 if ( value > 0.0f )
return (value-dead)/(1.0f-dead);
226 else return (value+dead)/(1.0f-dead);
232 inline float Smooth(
float actual,
float hope,
float time)
234 float future = actual + (hope-actual)*time;
238 if ( future > hope ) future = hope;
242 if ( future < hope ) future = hope;
262 inline float Bounce(
float progress,
float middle = 0.3f,
float bounce = 0.4f)
264 if ( progress < middle )
266 progress = progress/middle;
267 return 0.5f+sinf(progress*
PI-
PI/2.0f)/2.0f;
271 progress = (progress-middle)/(1.0f-middle);
272 return (1.0f-bounce/2.0f)+sinf((0.5f+progress*2.0f)*
PI)*(bounce/2.0f);
bool TestAngle(float angle, float min, float max)
Test if a angle is between two terminals.
Definition: func.h:168
const float DEG_TO_RAD
Degrees to radians multiplier.
Definition: const.h:51
const float TOLERANCE
Tolerance level – minimum accepted float value.
Definition: const.h:37
bool IsZero(float a, float tolerance=Math::TOLERANCE)
Compares a to zero within tolerance.
Definition: func.h:47
float Max(float a, float b)
Maximum.
Definition: func.h:75
float NormAngle(float angle)
Returns a normalized angle, that is in other words between 0 and 2 * PI.
Definition: func.h:158
float Direction(float a, float g)
Calculates the angle to rotate the angle a to the angle g.
Definition: func.h:191
float Mod(float a, float m)
Returns the modulo of a floating point number.
Definition: func.h:132
float Smooth(float actual, float hope, float time)
Gently advances a desired value from its current value.
Definition: func.h:232
const float PI
PI.
Definition: const.h:48
float Norm(float a)
Returns the normalized value (0 .. 1)
Definition: func.h:106
bool IsPowerOfTwo(unsigned int x)
Returns whether x is an even power of 2.
Definition: func.h:144
float Rand()
Returns a random value between 0 and 1.
Definition: func.h:138
bool IsEqual(float a, float b, float tolerance=Math::TOLERANCE)
Compares a and b within tolerance.
Definition: func.h:41
Namespace for (new) math code.
Definition: device.h:39
float Bounce(float progress, float middle=0.3f, float bounce=0.4f)
Bounces any movement.
Definition: func.h:262
const float LOG_2
Natural logarithm of 2.
Definition: const.h:56
void Swap(int &a, int &b)
Swaps two integers.
Definition: func.h:114
float Min(float a, float b)
Minimum.
Definition: func.h:53
T Clamp(T value, T min, T max)
Clamps the value to a range specified by min and max.
Definition: func.h:98
Constants used in math functions.
float Neutral(float value, float dead)
Managing the dead zone of a joystick.
Definition: func.h:217
int NextPowerOfTwo(int x)
Returns the next nearest power of two to x.
Definition: func.h:150
float PropAngle(float a, float b, float p)
Calculates a value (radians) proportional between a and b (degrees)
Definition: func.h:181