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)
99 if ( a < 0.0f )
return 0.0f;
100 if ( a > 1.0f )
return 1.0f;
105 inline void Swap(
int &a,
int &b)
113 inline void Swap(
float &a,
float &b)
123 inline float Mod(
float a,
float m)
125 return a - (
static_cast<int>(a / m) ) * m;
131 return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
137 return x && !(x & (x - 1));
143 double logbase2 = log(static_cast<float>(x)) /
Math::LOG_2;
144 return static_cast<int>(pow(2, ceil(logbase2)) + 0.5);
153 return PI*2.0f + angle;
159 inline bool TestAngle(
float angle,
float min,
float max)
166 return ( angle <= max || angle >= min );
168 return ( angle >= min && angle <= max );
177 return aa + p * (bb - aa);
189 if ( a+
PI*2.0f-g < g-a ) a +=
PI*2.0f;
193 if ( g+
PI*2.0f-a < a-g ) g +=
PI*2.0f;
210 if ( fabs(value) <= dead )
216 if ( value > 0.0f )
return (value-dead)/(1.0f-dead);
217 else return (value+dead)/(1.0f-dead);
223 inline float Smooth(
float actual,
float hope,
float time)
225 float future = actual + (hope-actual)*time;
229 if ( future > hope ) future = hope;
233 if ( future < hope ) future = hope;
253 inline float Bounce(
float progress,
float middle = 0.3f,
float bounce = 0.4f)
255 if ( progress < middle )
257 progress = progress/middle;
258 return 0.5f+sinf(progress*
PI-
PI/2.0f)/2.0f;
262 progress = (progress-middle)/(1.0f-middle);
263 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:159
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:149
float Direction(float a, float g)
Calculates the angle to rotate the angle a to the angle g.
Definition: func.h:182
float Mod(float a, float m)
Returns the modulo of a floating point number.
Definition: func.h:123
float Smooth(float actual, float hope, float time)
Gently advances a desired value from its current value.
Definition: func.h:223
const float PI
PI.
Definition: const.h:48
float Norm(float a)
Returns the normalized value (0 .. 1)
Definition: func.h:97
bool IsPowerOfTwo(unsigned int x)
Returns whether x is an even power of 2.
Definition: func.h:135
float Rand()
Returns a random value between 0 and 1.
Definition: func.h:129
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:253
const float LOG_2
Natural logarithm of 2.
Definition: const.h:56
void Swap(int &a, int &b)
Swaps two integers.
Definition: func.h:105
float Min(float a, float b)
Minimum.
Definition: func.h:53
Constants used in math functions.
float Neutral(float value, float dead)
Managing the dead zone of a joystick.
Definition: func.h:208
int NextPowerOfTwo(int x)
Returns the next nearest power of two to x.
Definition: func.h:141
float PropAngle(float a, float b, float p)
Calculates a value (radians) proportional between a and b (degrees)
Definition: func.h:172