#ifndef UTIL_H #define UTIL_H #include #include #include #include const double infinity = std::numeric_limits::infinity(); const double pi = 3.1415926535897932385; inline double degrees_to_radians(double degrees) { return degrees * pi / 180; } inline double random_double() { static std::uniform_real_distribution distribution(0.0, 1.0); //static std::mt19937 generator(std::time(nullptr)); static thread_local std::mt19937 generator(std::random_device{}()); static std::function rand_gen = std::bind(distribution, generator); return rand_gen(); } inline double random_double(double min, double max) { return min + (max-min) * random_double(); } inline int random_int(int min, int max) { return static_cast(random_double(min, max+1)); } inline double clamp(double x, double min, double max) { if (x < min) return min; if (x > max) return max; return x; } #endif // UTIL_H