/* math/functions.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_MATH_FUNCTIONS_H__ #define __INCLUDED_MATH_FUNCTIONS_H__ #include #include #include namespace math { /** * @brief return the smallest of two floats */ inline const float min(const float a, const float b) { return (a < b ? a : b); } /** * @brief return the smallest of two integers */ inline const int min(const int a, const int b) { return (a < b ? a : b); } /** * @brief return the smallest of two longs */ inline const long min(const long a, const long b) { return (a < b ? a : b); } /** * @brief return the largest of two floats */ inline const float max(const float a, const float b) { return (a > b ? a : b); } /** * @brief return the largest of two integers */ inline const int max(const int a, const int b) { return (a > b ? a : b); } /** * @brief return the largest of two longs */ inline const long max(const long a, const long b) { return (a > b ? a : b); } /** * @brief returns a random float * The value returned will be in the interval [0-max] * @param max the maximum value returned * */ inline float randomf(const float max = 1.0f) { return ((float) rand() / (float) RAND_MAX) * max; } /** * @brief returns a random float * The value returned will be in the interval [min-max] * */ inline float randomf(const float min, const float max) { return (min + randomf(max - min)); } /** * @brief returns a random integer * The value returned will be in the interval [0-(max-1)] * @param max the maximum value returned * */ inline unsigned randomi(const unsigned int max) { return ((unsigned int)(rand() % max)); } /// return the sign of a float value float sgnf(float value); /// return an angle in the ]-180,180] range float degrees180f(float angle); /// return an angle in the [0,360[ range float degrees360f(float angle); /// clamp a float to a specified range inline void clamp(float &value, const float min = 0.0f, const float max = 1.0f) { if (value < min) value = min; else if (value > max) value = max; } /// return the absolute value of a float inline float absf(const float f) { return ( f < 0.0f ? -f : f ); } /// swap two float values inline void swap(float &x, float &y) { float tmp = x; x = y; y = tmp; } } // namespace math #endif // __INCLUDED_MATH_FUNCTIONS_H__