28 #ifndef BERSERK_MATHUTILS_HPP
29 #define BERSERK_MATHUTILS_HPP
74 static void Split(
float v,
float &integer,
float &fractional) {
75 fractional = std::modf(v, &integer);
78 static void Split(
double v,
double &integer,
double &fractional) {
79 fractional = std::modf(v, &integer);
82 static float Min(
float a,
float b) {
return std::fminf(a, b); }
83 static double Min(
double a,
double b) {
return std::fmin(a, b); }
85 static float Max(
float a,
float b) {
return std::fmaxf(a, b); }
86 static double Max(
double a,
double b) {
return std::fmax(a, b); }
88 static float Sin(
float a) {
return std::sin(a); }
89 static double Sin(
double a) {
return std::sin(a); }
91 static float Cos(
float a) {
return std::cos(a); }
92 static double Cos(
double a) {
return std::cos(a); }
94 static float Tan(
float a) {
return std::tan(a); }
95 static double Tan(
double a) {
return std::tan(a); }
97 static float Asin(
float a) {
return std::asin(a); }
98 static double Asin(
double a) {
return std::asin(a); }
100 static float Acos(
float a) {
return std::acos(a); }
101 static double Acos(
double a) {
return std::acos(a); }
103 static float Atan(
float a) {
return std::atan(a); }
104 static double Atan(
double a) {
return std::atan(a); }
106 static float Sqrt(
float a) {
return std::sqrt(a); }
107 static double Sqrt(
double a) {
return std::sqrt(a); }
109 static float Exp(
float a) {
return std::exp(a); }
110 static double Exp(
double a) {
return std::exp(a); }
112 static float Pow(
float a,
float p) {
return std::pow(a, p); }
113 static double Pow(
double a,
double p) {
return std::pow(a, p); }
115 static float Log(
float a) {
return std::log(a); }
116 static double Log(
double a) {
return std::log(a); }
118 static float Log2(
float a) {
return std::log2(a); }
119 static double Log2(
double a) {
return std::log2(a); }
121 static float Log10(
float a) {
return std::log10(a); }
122 static double Log10(
double a) {
return std::log10(a); }
124 static float Abs(
float a) {
return std::fabs(a); }
125 static double Abs(
double a) {
return std::abs(a); }
134 static float Round(
float a) {
return std::round(a); }
136 static double Round(
double a) {
return std::round(a); }
139 static float Ceil(
float a) {
return std::ceil(a); }
141 static double Ceil(
double a) {
return std::ceil(a); }
144 static float Floor(
float a) {
return std::floor(a); }
146 static double Floor(
double a) {
return std::floor(a); }
148 static bool Same(
float a,
float b) {
152 static bool Same(
double a,
double b) {
156 static float Lerp(
float t,
float left,
float right) {
157 return left * (1.0f - t) + right * t;
160 static double Lerp(
double t,
double left,
double right) {
161 return left * (1.0 - t) + right * t;
165 t =
Clamp((t - left) / (right - left), 0.0f, 1.0f);
166 return 2.0f * t * t * (1.5f - t);
169 static double SmoothStep(
double t,
double left,
double right) {
170 t =
Clamp((t - left) / (right - left), 0.0, 1.0);
171 return 2.0 * t * t * (1.5 - t);
175 t =
Clamp((t - left) / (right - left), 0.0f, 1.0f);
176 return t * t * t * (t * (t * 6.0f - 15.0f) + 10.0f);
180 t =
Clamp((t - left) / (right - left), 0.0, 1.0);
181 return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);
185 static bool Between(
T t,
T left,
T right) {
return (t >= left) && (t <= right); }
188 static T Clamp(
T t,
T left,
T right) {
return (t < left ? left : (t > right ? right : t)); }
191 static T Min(
T a,
T b) {
return (a < b ? a : b); }
194 static T Max(
T a,
T b) {
return (a > b ? a : b); }
197 static T Abs(
T a) {
return (a > 0 ? a : -a); }
199 template<
typename T, T a>
202 template<
typename T,
T a,
T b,
T... args>
204 return (a > b ? ConstMax<T, a, args...>() : ConstMax<T, b, args...>());
207 template<
typename T, T a>
210 template<
typename T,
T a,
T b,
T... args>
212 return (a < b ? ConstMin<T, a, args...>() : ConstMin<T, b, args...>());
#define BRK_NS_END
Definition: Config.hpp:48
#define BRK_API
Definition: Config.hpp:32
Math basic functions and constants.
Definition: MathUtils.hpp:47
static float Log(float a)
Definition: MathUtils.hpp:115
static float SmootherStep(float t, float left, float right)
Definition: MathUtils.hpp:174
static float Floor(float a)
Definition: MathUtils.hpp:144
static double Pow(double a, double p)
Definition: MathUtils.hpp:113
static double Lerp(double t, double left, double right)
Definition: MathUtils.hpp:160
static BRK_API const double QUARTER_PI
Definition: MathUtils.hpp:63
static double Ceil(double a)
Definition: MathUtils.hpp:141
static double Abs(double a)
Definition: MathUtils.hpp:125
static double Sqrt(double a)
Definition: MathUtils.hpp:107
static double Exp(double a)
Definition: MathUtils.hpp:110
static BRK_API const double E
Definition: MathUtils.hpp:65
static BRK_API const double HALF_PI
Definition: MathUtils.hpp:62
static double Min(double a, double b)
Definition: MathUtils.hpp:83
static double Round(double a)
Definition: MathUtils.hpp:136
static BRK_API const double PI
Definition: MathUtils.hpp:61
static BRK_API const float Ef
Definition: MathUtils.hpp:72
static double Log10(double a)
Definition: MathUtils.hpp:122
static BRK_API const float HALF_PIf
Definition: MathUtils.hpp:69
static bool Same(float a, float b)
Definition: MathUtils.hpp:148
static float Lerp(float t, float left, float right)
Definition: MathUtils.hpp:156
static double Log(double a)
Definition: MathUtils.hpp:116
static float Min(float a, float b)
Definition: MathUtils.hpp:82
static BRK_API const float THRESH_POINTS_ARE_SAME
Definition: MathUtils.hpp:55
static float Log2(float a)
Definition: MathUtils.hpp:118
static T Abs(T a)
Definition: MathUtils.hpp:197
static float RadToDeg(float a)
Definition: MathUtils.hpp:130
static BRK_API const float QUARTER_PIf
Definition: MathUtils.hpp:70
static double Sin(double a)
Definition: MathUtils.hpp:89
static double Asin(double a)
Definition: MathUtils.hpp:98
static double Cos(double a)
Definition: MathUtils.hpp:92
static double Tan(double a)
Definition: MathUtils.hpp:95
static double Acos(double a)
Definition: MathUtils.hpp:101
static T Clamp(T t, T left, T right)
Definition: MathUtils.hpp:188
static float Pow(float a, float p)
Definition: MathUtils.hpp:112
static float Atan(float a)
Definition: MathUtils.hpp:103
static float Asin(float a)
Definition: MathUtils.hpp:97
static BRK_API const float SQRT2f
Definition: MathUtils.hpp:71
static BRK_API const float THRESH_COMPARE_FLOAT64
Definition: MathUtils.hpp:58
static constexpr T ConstMin() noexcept
Definition: MathUtils.hpp:208
static BRK_API const float THRESH_COMPARE_FLOAT32
Definition: MathUtils.hpp:57
static float Tan(float a)
Definition: MathUtils.hpp:94
static BRK_API const float PIf
Definition: MathUtils.hpp:68
static double DegToRad(double a)
Definition: MathUtils.hpp:128
static double Log2(double a)
Definition: MathUtils.hpp:119
static float Exp(float a)
Definition: MathUtils.hpp:109
static float Sqrt(float a)
Definition: MathUtils.hpp:106
static constexpr T ConstMax() noexcept
Definition: MathUtils.hpp:203
static float Round(float a)
Definition: MathUtils.hpp:134
static float Acos(float a)
Definition: MathUtils.hpp:100
static constexpr T ConstMax() noexcept
Definition: MathUtils.hpp:200
static T Max(T a, T b)
Definition: MathUtils.hpp:194
static void Split(double v, double &integer, double &fractional)
Definition: MathUtils.hpp:78
static T Min(T a, T b)
Definition: MathUtils.hpp:191
static float Cos(float a)
Definition: MathUtils.hpp:91
static double RadToDeg(double a)
Definition: MathUtils.hpp:131
static double Atan(double a)
Definition: MathUtils.hpp:104
static BRK_API const float BIG_NUMBER_FLOAT32
Definition: MathUtils.hpp:49
static double SmoothStep(double t, double left, double right)
Definition: MathUtils.hpp:169
static float Log10(float a)
Definition: MathUtils.hpp:121
static double Max(double a, double b)
Definition: MathUtils.hpp:86
static BRK_API const double SQRT2
Definition: MathUtils.hpp:64
static BRK_API const float THRESH_FLOAT32
Definition: MathUtils.hpp:53
static BRK_API const float THRESH_ZERO_NORM_SQUARED
Definition: MathUtils.hpp:56
static bool Between(T t, T left, T right)
Definition: MathUtils.hpp:185
static float Max(float a, float b)
Definition: MathUtils.hpp:85
static constexpr T ConstMin() noexcept
Definition: MathUtils.hpp:211
static float DegToRad(float a)
Definition: MathUtils.hpp:127
static double SmootherStep(double t, double left, double right)
Definition: MathUtils.hpp:179
static void Split(float v, float &integer, float &fractional)
Definition: MathUtils.hpp:74
static float Abs(float a)
Definition: MathUtils.hpp:124
static double Floor(double a)
Definition: MathUtils.hpp:146
static float Sin(float a)
Definition: MathUtils.hpp:88
static BRK_API const float SMALL_NUMBER_FLOAT32
Definition: MathUtils.hpp:50
static float Ceil(float a)
Definition: MathUtils.hpp:139
static BRK_API const float THRESH_POINT_ON_PLANE
Definition: MathUtils.hpp:54
static float SmoothStep(float t, float left, float right)
Definition: MathUtils.hpp:164
static bool Same(double a, double b)
Definition: MathUtils.hpp:152
Definition: GLDevice.cpp:46