sead
Loading...
Searching...
No Matches
seadMathCalcCommon.h
Go to the documentation of this file.
1#ifndef SEAD_MATHCALCCOMMON_H_
2#define SEAD_MATHCALCCOMMON_H_
3
4#include <basis/seadTypes.h>
5
6#include <numbers>
7
8namespace sead {
9
10template <typename T>
12{
13public:
14 static constexpr u32 cQuarterRoundIdx = 0x40000000; // 90 degrees, PI/2 radians
15 static constexpr u32 cHalfRoundIdx = 0x80000000; // 180 degrees, PI radians
16
17public:
25
27 {
30 };
31
32 struct ExpSample
33 {
36 };
37
38 struct LogSample
39 {
42 };
43
44public:
45 static constexpr T piHalf() { return std::numbers::pi_v<T> / T(2); }
46 static constexpr T pi() { return std::numbers::pi_v<T>; }
47 static constexpr T pi2() { return std::numbers::pi_v<T> * T(2); }
48 static constexpr T zero() { return 0; }
49 static constexpr T one() { return 1; }
50 static constexpr T ln2() { return std::numbers::ln2_v<T>; }
51 static constexpr T ln2Inv() { return std::numbers::log2e_v<T>; }
52
53 static constexpr T neg(T t)
54 {
55 return -t;
56 }
57
58 static constexpr T inv(T t)
59 {
60 return 1 / t;
61 }
62
63 static constexpr T sign(T t)
64 {
65 if (t >= 0) return 1;
66 else return -1;
67 }
68
69 static constexpr T fitSign(T x, T y)
70 {
71 // Unsure
72 return abs(x) * sign(y);
73 }
74
75 static constexpr T square(T t)
76 {
77 // Good for temp values
78 return t * t;
79 }
80
81 static constexpr T sqrt(T t);
82 static constexpr T rsqrt(T t);
83
84 static constexpr T pow(T x, T y);
85 static T powTable(T, T);
86
87 static constexpr T sin(T t);
88 static constexpr T cos(T t);
89 static constexpr T tan(T t);
90
91 static constexpr T asin(T s);
92 static constexpr T acos(T c);
93 static constexpr T atan(T t);
94 static constexpr T atan2(T y, T x);
95
96 static T sinIdx(u32 idx);
97 static T cosIdx(u32 idx);
98 static T tanIdx(u32 idx);
99
100 static u32 asinIdx(T s);
101 static u32 acosIdx(T c);
102 static u32 atanIdx(T t);
103 static u32 atan2Idx(T y, T x);
104
105 static void sinCosIdx(T* p_sin, T* p_cos, u32 idx);
106
107 static constexpr T exp(T t);
108 static constexpr T log(T t);
109 static constexpr T log2(T t);
110 static constexpr T log10(T t);
111
112 static T expTable(T x);
113 static T logTable(T x);
114
115 static constexpr T minNumber();
116 static constexpr T maxNumber();
117 static constexpr T infinity();
118 static constexpr T nan();
119 static constexpr T epsilon();
120
121 static constexpr bool equalsEpsilon(T a, T b, T eps = epsilon())
122 {
123 return abs(a - b) <= eps;
124 }
125
126 static constexpr T abs(T x)
127 {
128 if (x > 0) return x;
129 else return -x;
130 }
131
132 static constexpr T max(T a, T b)
133 {
134 if (a > b) return a;
135 else return b;
136 }
137
138 static constexpr T min(T a, T b)
139 {
140 if (a < b) return a;
141 else return b;
142 }
143
144 static constexpr T max3(T a, T b, T c)
145 {
146 return max(max(a, b), c);
147 }
148
149 static constexpr T min3(T a, T b, T c)
150 {
151 return min(min(a, b), c);
152 }
153
154 static constexpr T deg2rad(T a)
155 {
156 return a * (pi() / 180.0f);
157 }
158
159 static constexpr T rad2deg(T a)
160 {
161 return a * (180.0f / pi());
162 }
163
164 static constexpr u32 deg2idx(T a)
165 {
166 return (s32)(a * cHalfRoundIdx / 180.0f);
167 }
168
169 static constexpr u32 rad2idx(T a)
170 {
171 return (s32)(a * cHalfRoundIdx / pi());
172 }
173
174 static constexpr T idx2deg(u32 a)
175 {
176 return static_cast<float>(static_cast<s32>(a)) * 180.0f / cHalfRoundIdx;
177 }
178
179 static constexpr T idx2rad(u32 a)
180 {
181 return (s32)a * pi() / cHalfRoundIdx;
182 }
183
184 static T roundAngle(T);
185 static T angleDist(T, T);
186
187 static T random();
188 static T getRand(T);
189 static T getRandRange(T, T);
190 static T getRandSign();
191
192 static constexpr s32 roundOff(T val);
193 static constexpr s32 floor(T val);
194 static constexpr s32 ceil(T val);
195
196 static T constexpr roundUpN(T val, s32 multNumber);
197 static T constexpr roundUpPow2(T val, s32 base);
198 static T constexpr roundDownN(T val, s32 multNumber);
199 static T constexpr roundDownPow2(T val, s32 base);
200
201 static T constexpr clampMax(T val, T max_);
202 static T constexpr clampMin(T val, T min_);
203 static T constexpr clamp2(T min_, T val, T max_);
204
205 static T gcd(T m, T n);
206 static T lcm(T m, T n);
207
208 static bool isZero(T, T);
209 static bool isNan(T);
210 static bool isPow2(T);
211 static bool isMultiplePow2(T, T);
212 static bool isInfinity(T);
213 static bool isIntersect1d(T, T, T, T);
214
215 static bool chase(T*, T, T);
216 static bool chaseAngle(T*, T, T);
217 static bool chaseAngleIdx(u32*, u32, T);
218
219 static constexpr T lerp(T a, T b, f32 ratio)
220 {
221 return a + (b - a) * ratio;
222 }
223
224protected:
225 static u32 atanIdx_(T t);
226 static T expLn2_(T x);
227 static T log1_2_(T x);
229
230public:
231 static const SinCosSample cSinCosTbl[256 + 1];
232 static const AtanSample cAtanTbl[128 + 1];
233 static const ExpSample cExpTbl[ 32 + 1];
234 static const LogSample cLogTbl[256 + 1];
235};
236
237template <>
239
240template <>
242
243template <>
245
246template <>
248
249template <>
251
252template <>
254
255template <>
257
258template <>
260
261template <>
263
264// For convenience
268
269} // namespace sead
270
271#include <math/seadMathCalcCommon.hpp>
272
273#endif // SEAD_MATHCALCCOMMON_H_
Definition seadMathCalcCommon.h:12
static constexpr T maxNumber()
Definition seadMathCalcCommon.hpp:307
static T constexpr clampMax(T val, T max_)
Definition seadMathCalcCommon.hpp:495
static u32 acosIdx(T c)
static constexpr T atan2(T y, T x)
Definition seadMathCalcCommon.hpp:98
static constexpr T sign(T t)
Definition seadMathCalcCommon.h:63
static constexpr T acos(T c)
Definition seadMathCalcCommon.hpp:84
static T cosIdx(u32 idx)
static constexpr T log2(T t)
Definition seadMathCalcCommon.hpp:286
static T gcd(T m, T n)
static constexpr T minNumber()
Definition seadMathCalcCommon.hpp:300
static constexpr T pow(T x, T y)
Definition seadMathCalcCommon.hpp:49
static constexpr u32 rad2idx(T a)
Definition seadMathCalcCommon.h:169
static constexpr T deg2rad(T a)
Definition seadMathCalcCommon.h:154
static constexpr T one()
Definition seadMathCalcCommon.h:49
static constexpr T max3(T a, T b, T c)
Definition seadMathCalcCommon.h:144
static constexpr T idx2rad(u32 a)
Definition seadMathCalcCommon.h:179
static u32 atan2Idx(T y, T x)
static constexpr T sin(T t)
Definition seadMathCalcCommon.hpp:56
static bool isInfinity(T)
static constexpr T atan(T t)
Definition seadMathCalcCommon.hpp:91
static T roundAngle(T)
static constexpr T log10(T t)
Definition seadMathCalcCommon.hpp:293
static T getRandRange(T, T)
static const ExpSample cExpTbl[32+1]
Definition seadMathCalcCommon.h:233
static constexpr T min(T a, T b)
Definition seadMathCalcCommon.h:138
static constexpr T pi2()
Definition seadMathCalcCommon.h:47
static void assertGreaterThanOrEqualToZero_(T)
static bool chase(T *, T, T)
static bool isIntersect1d(T, T, T, T)
static constexpr u32 cHalfRoundIdx
Definition seadMathCalcCommon.h:15
static T log1_2_(T x)
static constexpr T lerp(T a, T b, f32 ratio)
Definition seadMathCalcCommon.h:219
static constexpr T piHalf()
Definition seadMathCalcCommon.h:45
static bool chaseAngle(T *, T, T)
static const LogSample cLogTbl[256+1]
Definition seadMathCalcCommon.h:234
static constexpr T asin(T s)
Definition seadMathCalcCommon.hpp:77
static constexpr T square(T t)
Definition seadMathCalcCommon.h:75
static T logTable(T x)
static void sinCosIdx(T *p_sin, T *p_cos, u32 idx)
static constexpr T neg(T t)
Definition seadMathCalcCommon.h:53
static u32 atanIdx(T t)
static bool chaseAngleIdx(u32 *, u32, T)
static constexpr T sqrt(T t)
Definition seadMathCalcCommon.hpp:17
static T powTable(T, T)
static constexpr bool equalsEpsilon(T a, T b, T eps=epsilon())
Definition seadMathCalcCommon.h:121
static T expTable(T x)
static constexpr T pi()
Definition seadMathCalcCommon.h:46
static T constexpr clampMin(T val, T min_)
Definition seadMathCalcCommon.hpp:504
static T constexpr roundDownN(T val, s32 multNumber)
static constexpr s32 roundOff(T val)
Definition seadMathCalcCommon.hpp:416
static constexpr T cos(T t)
Definition seadMathCalcCommon.hpp:63
static constexpr T fitSign(T x, T y)
Definition seadMathCalcCommon.h:69
static constexpr T log(T t)
Definition seadMathCalcCommon.hpp:279
static constexpr T ln2()
Definition seadMathCalcCommon.h:50
static T expLn2_(T x)
static constexpr u32 cQuarterRoundIdx
Definition seadMathCalcCommon.h:14
static T constexpr roundDownPow2(T val, s32 base)
static T constexpr roundUpPow2(T val, s32 base)
static const AtanSample cAtanTbl[128+1]
Definition seadMathCalcCommon.h:232
static T angleDist(T, T)
static bool isMultiplePow2(T, T)
static constexpr T ln2Inv()
Definition seadMathCalcCommon.h:51
static constexpr T epsilon()
Definition seadMathCalcCommon.hpp:377
static constexpr T rsqrt(T t)
Definition seadMathCalcCommon.hpp:24
static constexpr s32 floor(T val)
Definition seadMathCalcCommon.hpp:437
static u32 atanIdx_(T t)
static constexpr T abs(T x)
Definition seadMathCalcCommon.h:126
static constexpr T infinity()
Definition seadMathCalcCommon.hpp:356
static constexpr T min3(T a, T b, T c)
Definition seadMathCalcCommon.h:149
static constexpr T tan(T t)
Definition seadMathCalcCommon.hpp:70
static T constexpr clamp2(T min_, T val, T max_)
Definition seadMathCalcCommon.hpp:513
static const SinCosSample cSinCosTbl[256+1]
Definition seadMathCalcCommon.h:231
static constexpr u32 deg2idx(T a)
Definition seadMathCalcCommon.h:164
static T tanIdx(u32 idx)
static constexpr T zero()
Definition seadMathCalcCommon.h:48
static bool isZero(T, T)
static constexpr T exp(T t)
Definition seadMathCalcCommon.hpp:272
static T sinIdx(u32 idx)
static T lcm(T m, T n)
static T getRandSign()
static bool isNan(T)
static constexpr T idx2deg(u32 a)
Definition seadMathCalcCommon.h:174
static constexpr T nan()
static constexpr T inv(T t)
Definition seadMathCalcCommon.h:58
static constexpr T max(T a, T b)
Definition seadMathCalcCommon.h:132
static T constexpr roundUpN(T val, s32 multNumber)
static u32 asinIdx(T s)
static constexpr T rad2deg(T a)
Definition seadMathCalcCommon.h:159
static constexpr s32 ceil(T val)
Definition seadMathCalcCommon.hpp:458
static bool isPow2(T)
Definition seadAssert.h:44
MathCalcCommon< u32 > Mathu
Definition seadMathCalcCommon.h:266
MathCalcCommon< s32 > Mathi
Definition seadMathCalcCommon.h:265
MathCalcCommon< f32 > Mathf
Definition seadMathCalcCommon.h:267
Definition seadMathCalcCommon.h:27
T atan_delta
Definition seadMathCalcCommon.h:29
u32 atan_val
Definition seadMathCalcCommon.h:28
Definition seadMathCalcCommon.h:33
T exp_val
Definition seadMathCalcCommon.h:34
T exp_delta
Definition seadMathCalcCommon.h:35
Definition seadMathCalcCommon.h:39
T log_val
Definition seadMathCalcCommon.h:40
T log_delta
Definition seadMathCalcCommon.h:41
Definition seadMathCalcCommon.h:19
T sin_delta
Definition seadMathCalcCommon.h:21
T cos_delta
Definition seadMathCalcCommon.h:23
T sin_val
Definition seadMathCalcCommon.h:20
T cos_val
Definition seadMathCalcCommon.h:22