42 return fabs(a - b) < tolerance;
52 inline float Min(
float a,
float b)
54 if ( a <= b )
return a;
58 inline float Min(
float a,
float b,
float c)
60 return Min(
Min(a, b), c );
63 inline float Min(
float a,
float b,
float c,
float d)
68 inline float Min(
float a,
float b,
float c,
float d,
float e)
74 inline float Max(
float a,
float b)
76 if ( a >= b )
return a;
80 inline float Max(
float a,
float b,
float c)
85 inline float Max(
float a,
float b,
float c,
float d)
90 inline float Max(
float a,
float b,
float c,
float d,
float e)
98 if ( a < 0.0f )
return 0.0f;
99 if ( a > 1.0f )
return 1.0f;
104 inline void Swap(
int &a,
int &b)
112 inline void Swap(
float &a,
float &b)
122 inline float Mod(
float a,
float m)
124 return a - (
static_cast<int>(a / m) ) * m;
130 return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
136 return x && !(x & (x - 1));
142 double logbase2 = log(static_cast<float>(x)) /
Math::LOG_2;
143 return static_cast<int>(pow(2, ceil(logbase2)) + 0.5);
152 return PI*2.0f + angle;
158 inline bool TestAngle(
float angle,
float min,
float max)
165 return ( angle <= max || angle >= min );
167 return ( angle >= min && angle <= max );
173 float aa =
static_cast<float>(a) *
DEG_TO_RAD;
174 float bb =
static_cast<float>(b) *
DEG_TO_RAD;
176 return aa + p * (bb - aa);
188 if ( a+
PI*2.0f-g < g-a ) a +=
PI*2.0f;
192 if ( g+
PI*2.0f-a < a-g ) g +=
PI*2.0f;
209 if ( fabs(value) <= dead )
215 if ( value > 0.0f )
return (value-dead)/(1.0f-dead);
216 else return (value+dead)/(1.0f-dead);
222 inline float Smooth(
float actual,
float hope,
float time)
224 float future = actual + (hope-actual)*time;
228 if ( future > hope ) future = hope;
232 if ( future < hope ) future = hope;
252 inline float Bounce(
float progress,
float middle = 0.3f,
float bounce = 0.4f)
254 if ( progress < middle )
256 progress = progress/middle;
257 return 0.5f+sinf(progress*
PI-
PI/2.0f)/2.0f;
261 progress = (progress-middle)/(1.0f-middle);
262 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:158
const float DEG_TO_RAD
Degrees to radians multiplier.
Definition: const.h:50
const float TOLERANCE
Tolerance level – minimum accepted float value.
Definition: const.h:36
bool IsZero(float a, float tolerance=Math::TOLERANCE)
Compares a to zero within tolerance.
Definition: func.h:46
float Max(float a, float b)
Maximum.
Definition: func.h:74
float NormAngle(float angle)
Returns a normalized angle, that is in other words between 0 and 2 * PI.
Definition: func.h:148
float Direction(float a, float g)
Calculates the angle to rotate the angle a to the angle g.
Definition: func.h:181
float Mod(float a, float m)
Returns the modulo of a floating point number.
Definition: func.h:122
float Smooth(float actual, float hope, float time)
Gently advances a desired value from its current value.
Definition: func.h:222
const float PI
PI.
Definition: const.h:47
float Norm(float a)
Returns the normalized value (0 .. 1)
Definition: func.h:96
bool IsPowerOfTwo(unsigned int x)
Returns whether x is an even power of 2.
Definition: func.h:134
float Rand()
Returns a random value between 0 and 1.
Definition: func.h:128
bool IsEqual(float a, float b, float tolerance=Math::TOLERANCE)
Compares a and b within tolerance.
Definition: func.h:40
Namespace for (new) math code.
Definition: const.h:32
float Bounce(float progress, float middle=0.3f, float bounce=0.4f)
Bounces any movement.
Definition: func.h:252
const float LOG_2
Natural logarithm of 2.
Definition: const.h:55
void Swap(int &a, int &b)
Swaps two integers.
Definition: func.h:104
float Min(float a, float b)
Minimum.
Definition: func.h:52
Constants used in math functions.
float Neutral(float value, float dead)
Managing the dead zone of a joystick.
Definition: func.h:207
int NextPowerOfTwo(int x)
Returns the next nearest power of two to x.
Definition: func.h:140
float PropAngle(int a, int b, float p)
Calculates a value (radians) proportional between a and b (degrees)
Definition: func.h:171