29#ifndef NOMLIB_MATH_HELPERS_HPP
30#define NOMLIB_MATH_HELPERS_HPP
35#include "nomlib/config.hpp"
36#include "nomlib/math/Point2.hpp"
37#include "nomlib/math/Size2.hpp"
41const double PI = 4.0 * atan ( 1.0 );
45extern std::random_device rd;
46extern std::default_random_engine rd_generator;
61void init_rand(uint32 seed_seq);
69inline T uniform_int_rand(T start_range, T end_range)
71 std::uniform_int_distribution<T> distribution(start_range, end_range);
73 return distribution(priv::rd_generator);
82inline T uniform_real_rand(T start_range, T end_range)
84 std::uniform_real_distribution<T> distribution(start_range, end_range);
86 return distribution(priv::rd_generator);
91const Point2d rotate_points (
float angle,
float x,
float y,
float pivot_x,
float pivot_y );
102inline T round_float(real32 number)
104 real32 ret = number < 0.0f ? ceilf(number - 0.5f) : floorf(number + 0.5f);
105 return NOM_SCAST(T, ret);
114inline T round_float_down(real32 number)
116 real32 ret = floorf(number);
117 return NOM_SCAST(T, ret);
126inline T round_float_up(real32 number)
128 real32 ret = ceilf(number);
129 return NOM_SCAST(T, ret);
141inline T round_double(real64 number)
143 real64 ret = number < 0.0f ? ceil(number - 0.5f) : floor(number + 0.5f);
144 return NOM_SCAST(T, ret);
149inline T truncate_float(real32 number)
151 T ret = NOM_SCAST(T, number);
157inline real32 absolute_real32(real32 number)
159 real32 result = fabsf(number);
164inline real64 absolute_real64(real64 number)
166 real64 result = fabs(number);
171inline int absolute_int(
int number)
173 int result = std::abs(number);
182inline T minimum(
const T& a,
const T& b)
184 T result = (b < a) ? b : a;
192inline T maximum(
const T& a,
const T& b)
194 T result = (a < b) ? b : a;
200inline T clamp_min(
const T& a,
const T& b)
202 auto result = nom::minimum<T>(a, b);
208inline T clamp_max(
const T& a,
const T& b)
210 auto result = nom::maximum<T>(a, b);