40 return fabs(a - b) < tolerance;
50 inline float Min(
float a,
float b)
52 if ( a <= b )
return a;
56 inline float Min(
float a,
float b,
float c)
58 return Min(
Min(a, b), c );
61 inline float Min(
float a,
float b,
float c,
float d)
66 inline float Min(
float a,
float b,
float c,
float d,
float e)
72 inline float Max(
float a,
float b)
74 if ( a >= b )
return a;
78 inline float Max(
float a,
float b,
float c)
83 inline float Max(
float a,
float b,
float c,
float d)
88 inline float Max(
float a,
float b,
float c,
float d,
float e)
96 if ( a < 0.0f )
return 0.0f;
97 if ( a > 1.0f )
return 1.0f;
102 inline void Swap(
int &a,
int &b)
110 inline void Swap(
float &a,
float &b)
120 inline float Mod(
float a,
float m)
122 return a - (
static_cast<int>(a / m) ) * m;
128 return static_cast<float>(rand()) / static_cast<float>(RAND_MAX);
134 return x && !(x & (x - 1));
140 double logbase2 = log(static_cast<float>(x)) /
Math::LOG_2;
141 return static_cast<int>(pow(2, ceil(logbase2)) + 0.5);
150 return PI*2.0f + angle;
156 inline bool TestAngle(
float angle,
float min,
float max)
163 return ( angle <= max || angle >= min );
165 return ( angle >= min && angle <= max );
171 float aa =
static_cast<float>(a) *
DEG_TO_RAD;
172 float bb =
static_cast<float>(b) *
DEG_TO_RAD;
174 return aa + p * (bb - aa);
186 if ( a+
PI*2.0f-g < g-a ) a +=
PI*2.0f;
190 if ( g+
PI*2.0f-a < a-g ) g +=
PI*2.0f;
207 if ( fabs(value) <= dead )
213 if ( value > 0.0f )
return (value-dead)/(1.0f-dead);
214 else return (value+dead)/(1.0f-dead);
220 inline float Smooth(
float actual,
float hope,
float time)
222 float future = actual + (hope-actual)*time;
226 if ( future > hope ) future = hope;
230 if ( future < hope ) future = hope;
250 inline float Bounce(
float progress,
float middle = 0.3f,
float bounce = 0.4f)
252 if ( progress < middle )
254 progress = progress/middle;
255 return 0.5f+sinf(progress*
PI-
PI/2.0f)/2.0f;
259 progress = (progress-middle)/(1.0f-middle);
260 return (1.0f-bounce/2.0f)+sinf((0.5f+progress*2.0f)*
PI)*(bounce/2.0f);