14#define TRI_PI 3.1415926535897932384626433832795028841971693993751058209749445923f
15#define TRI_RAD_TO_DEG(X) ((X) * (180.0f / TRI_PI))
16#define TRI_DEG_TO_RAD(X) ((X) * (TRI_PI / 180.0f))
17#define TRI_EPSILON 0.03125f
18#define TRI_RAND_MAX RAND_MAX
19#define TRI_RAND_MAX_HALF RAND_MAX / 2.0f
20#define TRI_NANMASK (255<<23)
21#define TRI_IS_NAN(X) (((*(triS32*)&X)&BASE_MATH_NANMASK)==BASE_MATH_NANMASK)
28static inline triBool triMathInit (
void)
39static inline triFloat triMathBound (
const triFloat Min,
const triFloat Num,
const triFloat Max)
43 if ((Num) < (Min))
return (Min);
44 else if ((Num) > (Max))
return (Max);
49 if ((Num) < (Max))
return (Max);
50 else if ((Num) > (Min))
return (Min);
60static inline triFloat triMathRandom (
const triFloat Min,
const triFloat Max)
62 return (rand () * (((Max) - (Min)) * (1.0f / (triFloat)TRI_RAND_MAX)) + (Min));
70static inline triS32 triMathRInt (
const triFloat X)
72 return (triS32)((X) >= 0 ? (X) + 0.5 : (X) - 0.5);
80static inline triFloat triMathWrap (
const triFloat Min, triFloat Num,
const triFloat Max)
88 while ((Num) < (Min)) (Num) += Diff;
89 while ((Num) > (Max)) (Num) -= Diff;
95 while ((Num) < (Max)) (Num) += Diff;
96 while ((Num) > (Min)) (Num) -= Diff;
107static inline triBool triMathBetween (
const triFloat Min,
const triFloat Num,
const triFloat Max)
111 if ((Num) < (Min))
return FALSE;
112 else if ((Num) > (Max))
return FALSE;
117 if ((Num) > (Min))
return FALSE;
118 else if ((Num) < (Max))
return FALSE;
128static inline void triMathShift (triFloat Num1, triFloat Num2)
142static inline triU32 triMathNextPow2 (triU32 In)
146 for (Out=2; Out<In; Out<<=1);