1#pragma once
2
3#include <gfx/seadColor.h>
4#include <math/seadBoundBox.h>
5#include <math/seadMatrix.h>
6#include <math/seadVector.h>
7
8#include "Library/Math/Axis.h"
9
10namespace al {
11enum class Axis : s32;
12class VisitCellCallBack;
13
14template <typename T>
15inline T clamp(T value, T min, T max) {
16 if (value < min)
17 return min;
18 if (value > max)
19 return max;
20 return value;
21}
22
23enum EaseType : s32 {
24 EaseType_EaseIn = 1,
25 EaseType_EaseOut,
26 EaseType_EaseInOut,
27 EaseType_SquareIn,
28 EaseType_SquareOut
29};
30
31f32 calcAngleRadian(const sead::Vector3f& a, const sead::Vector3f& b);
32f32 calcAngleDegree(const sead::Vector3f& a, const sead::Vector3f& b);
33f32 calcAngleDegree(const sead::Vector2f& a, const sead::Vector2f& b);
34bool isNearZero(const sead::Vector2f& vec, f32 tolerance = 0.001f);
35bool tryCalcAngleDegree(f32* angle, const sead::Vector3f& a, const sead::Vector3f& b);
36bool isNearZero(const sead::Vector3f& vec, f32 tolerance = 0.001f);
37f32 calcAngleOnPlaneRadian(const sead::Vector3f& a, const sead::Vector3f& b,
38 const sead::Vector3f& vertical);
39void verticalizeVec(sead::Vector3f* out, const sead::Vector3f& vertical, const sead::Vector3f& vec);
40f32 calcAngleOnPlaneDegree(const sead::Vector3f& a, const sead::Vector3f& b,
41 const sead::Vector3f& vertical);
42f32 calcAngleOnPlaneDegreeOrZero(const sead::Vector3f& a, const sead::Vector3f& b,
43 const sead::Vector3f& vertical);
44bool tryCalcAngleOnPlaneDegree(f32* angle, const sead::Vector3f& a, const sead::Vector3f& b,
45 const sead::Vector3f& vertical);
46bool isParallelDirection(const sead::Vector3f& a, const sead::Vector3f& b, f32 tolerance = 0.01f);
47s32 calcAngleSignOnPlane(const sead::Vector3f& a, const sead::Vector3f& b,
48 const sead::Vector3f& vertical);
49bool isNearAngleRadian(const sead::Vector2f& a, const sead::Vector2f& b, f32 tolerance);
50void normalize(sead::Vector2f* out, const sead::Vector2f& vec);
51bool isNearAngleRadian(const sead::Vector3f& a, const sead::Vector3f& b, f32 tolerance);
52void normalize(sead::Vector3f* out, const sead::Vector3f& vec);
53bool isNearAngleDegree(const sead::Vector2f& a, const sead::Vector2f& b, f32 tolerance);
54bool isNearAngleDegree(const sead::Vector3f& a, const sead::Vector3f& b, f32 tolerance);
55bool isNearAngleRadianHV(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&, f32,
56 f32);
57bool tryNormalizeOrZero(sead::Vector3f* out, const sead::Vector3f& vec);
58bool tryNormalizeOrZero(sead::Vector3f* out);
59bool isNearAngleDegreeHV(const sead::Vector3f& a, const sead::Vector3f& b, const sead::Vector3f& c,
60 f32 toleranceH, f32 toleranceV);
61bool isInAngleOnPlaneDegreeHV(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&,
62 f32, f32, f32, f32);
63bool isNear(f32 value, f32 target, f32 tolerance = 0.001f);
64bool isNear(const sead::Vector2f& value, const sead::Vector2f& target, f32 tolerance = 0.001f);
65bool isNear(const sead::Vector3f& value, const sead::Vector3f& target, f32 tolerance = 0.001f);
66bool isNear(const sead::Color4f& value, const sead::Color4f& target, f32 tolerance = 0.001f);
67bool isNearZero(f32 value, f32 tolerance = 0.001f);
68bool isNearZero(const sead::Matrix34f& mtx, f32 tolerance = 0.001f);
69bool isNearZeroOrGreater(f32 value, f32 tolerance = 0.001f);
70bool isNearZeroOrLess(f32 value, f32 tolerance = 0.001f);
71bool isExistNearZeroVal(const sead::Vector3f& vec, f32 tolerance);
72bool isNormalize(const sead::Vector3f& vec, f32 tolerance = 0.001f);
73bool isNormalize(const sead::Matrix34f& mtx);
74bool isParallelDirection(const sead::Vector2f& a, const sead::Vector2f& b, f32 tolerance = 0.01f);
75bool isReverseDirection(const sead::Vector3f& a, const sead::Vector3f& b, f32 tolerance = 0.01f);
76bool isNearDirection(const sead::Vector2f& a, const sead::Vector2f& b, f32 tolerance = 0.01f);
77bool isNearDirection(const sead::Vector3f& a, const sead::Vector3f& b, f32 tolerance = 0.01f);
78bool isInRange(s32 x, s32 a, s32 b);
79bool isInRange(f32 x, f32 a, f32 b);
80void normalize(sead::Vector2f* vec);
81void normalize(sead::Vector3f* vec);
82void normalize(sead::Matrix33f* mtx);
83void normalize(sead::Matrix34f* mtx);
84bool tryNormalizeOrZero(sead::Vector2f* vec);
85bool tryNormalizeOrZero(sead::Vector2f* out, const sead::Vector2f& vec);
86bool tryNormalizeOrDirZ(sead::Vector3f* vec);
87bool tryNormalizeOrDirZ(sead::Vector3f* out, const sead::Vector3f& vec);
88void normalizeComplement(sead::Matrix34f* mtx);
89u32 getMaxAbsElementIndex(const sead::Vector3f& vec);
90void setLength(sead::Vector3f* vec, f32 length);
91void setProjectionLength(sead::Vector3f* out, const sead::Vector3f& vec, f32 length);
92bool limitLength(sead::Vector2f* out, const sead::Vector2f& vec, f32 limit);
93bool limitLength(sead::Vector3f* out, const sead::Vector3f& vec, f32 limit);
94f32 normalizeAbs(f32 x, f32 min, f32 max);
95f32 normalize(f32 x, f32 min, f32 max);
96f32 normalize(s32 x, s32 min, s32 max);
97f32 sign(f32 x);
98s32 sign(s32 x);
99f32 cubeRoot(f32 x);
100void clampV3f(sead::Vector3f* out, const sead::Vector3f& min, const sead::Vector3f& max);
101void clampV2f(sead::Vector2f* out, const sead::Vector2f& min, const sead::Vector2f& max);
102f32 easeIn(f32 t);
103f32 easeOut(f32 t);
104f32 easeInOut(f32 t);
105f32 squareIn(f32 t);
106f32 squareOut(f32 t);
107f32 powerIn(f32 t, f32 exp);
108f32 powerOut(f32 t, f32 exp);
109f32 logarithmIn(f32 t, f32 base);
110f32 logarithmOut(f32 t, f32 base);
111f32 exponentIn(f32 t, f32 exp);
112f32 exponentOut(f32 t, f32 exp);
113f32 hermiteRate(f32 t, f32 m0, f32 m1);
114f32 calcFourthOrderRate(f32 t, f32 scale);
115f32 calcTriangleWave01(f32, f32);
116f32 calcTriangleWave(f32, f32, f32, f32);
117f32 lerpValue(f32 a, f32 b, f32 t);
118f32 calcRate01(f32, f32, f32);
119f32 easeByType(f32 t, s32 easeType);
120f32 lerpValue(f32, f32, f32, f32, f32);
121f32 lerpDegree(f32, f32, f32);
122f32 lerpRadian(f32, f32, f32);
123void lerpVec(sead::Vector2f*, const sead::Vector2f&, const sead::Vector2f&, f32);
124void lerpVec(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
125void lerpVecHV(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&,
126 f32, f32);
127void separateVectorHV(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
128 const sead::Vector3f&);
129void lerpColor(sead::Color4f*, const sead::Color4f&, const sead::Color4f&, f32);
130f32 lerpLogValueEaseIn(f32, f32, f32, f32);
131f32 lerpLogValueEaseOut(f32, f32, f32, f32);
132void lerpLogVecEaseIn(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32, f32);
133void lerpLogVecEaseOut(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32, f32);
134f32 lerpExponentValueEaseIn(f32, f32, f32, f32);
135f32 lerpExponentValueEaseOut(f32, f32, f32, f32);
136void lerpExponentVecEaseIn(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32, f32);
137void lerpExponentVecEaseOut(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32,
138 f32);
139f32 clampLeapMinAbs(f32, f32, f32, f32);
140f32 hermite(f32 y0, f32 m0, f32 y1, f32 m1, f32 t);
141f32 hermite(f32 y0, f32 m0, f32 y1, f32 m1, f32 t, f32 width);
142void hermiteVec(sead::Vector3f* out, const sead::Vector3f& p0, const sead::Vector3f& v0,
143 const sead::Vector3f& p1, const sead::Vector3f& v1, f32 t);
144s32 converge(s32, s32, s32);
145f32 converge(f32, f32, f32);
146f32 convergeDegree(f32, f32, f32);
147f32 convergeRadian(f32, f32, f32);
148void convergeVec(sead::Vector2f*, const sead::Vector2f&, const sead::Vector2f&, f32);
149void convergeVec(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
150f32 diffNearAngleDegree(f32, f32);
151bool isInRangeAngleDegree(f32, f32, f32);
152bool calcEyesAnimAngleInRange(f32*, const sead::Vector3f&, const sead::Vector3f&,
153 const sead::Vector3f&, const sead::Vector3f&, f32, f32, f32, f32);
154bool isSameSign(f32, f32);
155u8 reverseBit8(u8 x);
156u16 reverseBit16(u16 x);
157u32 reverseBit32(u32 x);
158f32 calcVanDerCorput(u32 x);
159void calcHammersleyPoint(sead::Vector2f* outPoint, u32 i, u32 num);
160s32 findMaxFromArray(const s32*, s32);
161void separateMinMax(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&);
162s32 findMinFromArray(const s32*, s32);
163f32 getRandom();
164f32 getRandom(f32 max);
165f32 getRandom(f32 min, f32 max);
166s32 getRandom(s32 max);
167s32 getRandom(s32 min, s32 max);
168f32 getRandomDegree();
169f32 getRandomRadian();
170void getRandomVector(sead::Vector3f* vec, f32 maxComponent);
171void getRandomDir(sead::Vector3f* vec);
172void getRandomDirH(sead::Vector3f*, const sead::Vector3f&);
173void rotateVectorDegree(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
174void getRandomOnCircle(sead::Vector2f*, f32);
175void getRandomInCircle(sead::Vector2f*, f32);
176void getRandomInCircleMinMaxRadius(sead::Vector2f*, f32, f32);
177void getRandomInCircle(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
178void getRandomOnSphere(sead::Vector3f*, f32);
179void getRandomInSphere(sead::Vector3f*, f32);
180bool calcRandomDirInCone(sead::Vector3f*, const sead::Vector3f&, f32);
181void getRandomInSphereMinMaxRadius(sead::Vector3f*, f32, f32);
182void initRandomSeed(u32);
183void initRandomSeedByTick();
184void initRandomSeedByString(const char*);
185bool isHalfProbability();
186bool isPercentProbability(f32);
187void getRandomContext(u32*, u32*, u32*, u32*);
188void setRandomContext(u32, u32, u32, u32);
189void makeRandomDirXZ(sead::Vector3f*);
190f32 calcBoxMullerRandomGauss();
191void makeBoxMullerRandomGauss(sead::Vector2f*, f32, f32);
192f32 modf(f32 a, f32 b);
193s32 modi(s32 a, s32 b);
194f32 calcSpeedMax(f32 accel, f32 friction);
195f32 calcAccel(f32 speed, f32 friction);
196f32 calcFriction(f32 accel, f32 speed);
197bool separateScalarAndDirection(f32*, sead::Vector2f*, const sead::Vector2f&);
198bool separateScalarAndDirection(f32*, sead::Vector3f*, const sead::Vector3f&);
199void limitVectorSeparateHV(sead::Vector3f*, const sead::Vector3f&, f32, f32);
200void parallelizeVec(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&);
201void calcVectorSeparateHV(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32, f32);
202void limitVectorParallelVertical(sead::Vector3f*, const sead::Vector3f&, f32, f32);
203void separateVectorParallelVertical(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
204 const sead::Vector3f&);
205bool addVectorLimit(sead::Vector3f*, const sead::Vector3f&, f32);
206void alongVectorNormalH(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
207 const sead::Vector3f&);
208f32 calcDistanceVecToPlane(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&,
209 const sead::Vector3f&);
210void limitPlanePos(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
211 const sead::Vector3f&);
212bool limitCylinderInPos(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
213 const sead::Vector3f&, f32);
214bool limitCylinderInDir(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
215 const sead::Vector3f&, const sead::Vector3f&);
216bool limitCylinderInPos(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
217bool limitCylinderInDir(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
218 const sead::Vector3f&);
219void roundOffVec(sead::Vector3f* outVec, const sead::Vector3f& vec);
220void roundOffVec(sead::Vector3f* vec);
221void roundOffVec(sead::Vector2f* outVec, const sead::Vector2f& vec);
222void roundOffVec(sead::Vector2f* vec);
223f32 snapToGrid(f32 val, f32 gridSize, f32 offset);
224void snapVecToGrid(sead::Vector3f* outVec, const sead::Vector3f& vec, f32 gridSize,
225 const sead::Vector3f& offset);
226void snapVecToGrid(sead::Vector3f* outVec, const sead::Vector3f& vec,
227 const sead::Vector3f& gridSize, const sead::Vector3f& offset);
228void limitVectorOppositeDir(sead::Vector3f* outVec, const sead::Vector3f& inVec,
229 const sead::Vector3f& dir, f32 scale);
230void scaleVectorDirection(sead::Vector3f* outVec, const sead::Vector3f& inVec,
231 const sead::Vector3f& dir, f32 scale);
232void scaleVectorExceptDirection(sead::Vector3f* outVec, const sead::Vector3f& inVec,
233 const sead::Vector3f& dir, f32 scale);
234void snapVecToDirAxisY(sead::Vector3f*, const sead::Vector3f&, s32);
235bool calcDir(sead::Vector3f* outVec, const sead::Vector3f& vecA, const sead::Vector3f& vecB);
236bool calcDirH(sead::Vector3f* outVec, const sead::Vector3f& vecA, const sead::Vector3f& vecB);
237bool calcDirOnPlane(sead::Vector3f* outVec, const sead::Vector3f& vecA, const sead::Vector3f& vecB,
238 const sead::Vector3f& plane);
239f32 mapRangeLogarithmic(f32 x, f32 min, f32 max, f32 start, f32 end, f32 exponent);
240void calcDirFromLongitudeLatitude(sead::Vector3f* outVec, f32 longitude, f32 latitude);
241void calcLongitudeLatitudeFromDir(f32* longitude, f32* latitude, const sead::Vector3f& dir);
242
243u32 getMaxAbsElementIndex(const sead::Vector3i& vec);
244f32 getMaxAbsElementValue(const sead::Vector3f& vec);
245s32 getMaxAbsElementValue(const sead::Vector3i& vec);
246u32 getMinAbsElementIndex(const sead::Vector3f& vec);
247u32 getMinAbsElementIndex(const sead::Vector3i& vec);
248f32 getMinAbsElementValue(const sead::Vector3f& vec);
249s32 getMinAbsElementValue(const sead::Vector3i& vec);
250
251Axis calcNearVecFromAxis2(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
252 const sead::Vector3f&);
253Axis calcNearVecFromAxis3(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
254 const sead::Vector3f&, const sead::Vector3f&);
255void calcDirVerticalAny(sead::Vector3f*, const sead::Vector3f&);
256void calcDirSlide(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&);
257Axis calcNearVecFromAxis3(sead::Vector3f*, const sead::Vector3f&, const sead::Quatf&);
258void calcQuatLocalAxisAll(const sead::Quatf&, sead::Vector3f*, sead::Vector3f*, sead::Vector3f*);
259void addRandomVector(sead::Vector3f*, const sead::Vector3f&, f32);
260void turnRandomVector(sead::Vector3f*, const sead::Vector3f&, f32);
261void makeAxisFrontUp(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
262 const sead::Vector3f&);
263void makeAxisFrontSide(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
264 const sead::Vector3f&);
265void makeAxisUpFront(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&,
266 const sead::Vector3f&);
267void makeAxisUpSide(sead::Vector3f*, sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&);
268void makeQuatFromTwoAxis(sead::Quatf* outQuat, const sead::Vector3f& vectorA,
269 const sead::Vector3f& vectorB, s32 axisA, s32 axisB);
270void makeQuatFrontUp(sead::Quatf* outQuat, const sead::Vector3f& front, const sead::Vector3f& up);
271void makeQuatFrontSide(sead::Quatf* outQuat, const sead::Vector3f& front,
272 const sead::Vector3f& side);
273void makeQuatFrontNoSupport(sead::Quatf* outQuat, const sead::Vector3f& front);
274void makeQuatUpFront(sead::Quatf* outQuat, const sead::Vector3f& up, const sead::Vector3f& front);
275void makeQuatUpSide(sead::Quatf* outQuat, const sead::Vector3f& up, const sead::Vector3f& side);
276void makeQuatUpNoSupport(sead::Quatf* outQuat, const sead::Vector3f& up);
277void makeQuatSideUp(sead::Quatf* outQuat, const sead::Vector3f& side, const sead::Vector3f& up);
278void makeQuatSideFront(sead::Quatf* outQuat, const sead::Vector3f& side,
279 const sead::Vector3f& front);
280void makeQuatSideNoSupport(sead::Quatf* outQuat, const sead::Vector3f& side);
281void makeQuatFromToQuat(sead::Quatf*, const sead::Quatf&, const sead::Quatf&);
282void makeQuatRotationRate(sead::Quatf*, const sead::Vector3f&, const sead::Vector3f&, f32);
283bool makeQuatRotationLimit(sead::Quatf*, const sead::Vector3f&, const sead::Vector3f&, f32);
284void makeQuatAxisRotation(sead::Quatf*, const sead::Vector3f&, const sead::Vector3f&,
285 const sead::Vector3f&, f32);
286void makeQuatRotateDegree(sead::Quatf*, const sead::Vector3f&, f32);
287void slerpQuat(sead::Quatf*, const sead::Quatf&, const sead::Quatf&, f32);
288void calcQuatSide(sead::Vector3f* out, const sead::Quatf& quat);
289void calcQuatUp(sead::Vector3f* out, const sead::Quatf& quat);
290void calcQuatGravity(sead::Vector3f* out, const sead::Quatf& quat);
291void calcQuatFront(sead::Vector3f* out, const sead::Quatf& quat);
292f32 calcQuatUpY(const sead::Quatf&);
293f32 calcQuatFrontY(const sead::Quatf&);
294void calcQuatLocalAxis(sead::Vector3f*, const sead::Quatf&, s32);
295void calcQuatLocalSignAxis(sead::Vector3f*, const sead::Quatf&, s32);
296void calcQuatRotateDegree(sead::Vector3f*, const sead::Quatf&);
297void calcQuatRotateRadian(sead::Vector3f*, const sead::Quatf&);
298void calcQuatRotateAxisAndDegree(sead::Vector3f*, f32*, const sead::Quatf&);
299void calcQuatRotateAxisAndDegree(sead::Vector3f*, f32*, const sead::Quatf&, const sead::Quatf&);
300void rotateQuatRadian(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
301void makeQuatXDegree(sead::Quatf* outQuat, f32 angle);
302void makeQuatYDegree(sead::Quatf* outQuat, f32 angle);
303void makeQuatZDegree(sead::Quatf* outQuat, f32 angle);
304void rotateQuatXDirDegree(sead::Quatf*, const sead::Quatf&, f32);
305void rotateQuatYDirDegree(sead::Quatf*, const sead::Quatf&, f32);
306void rotateQuatZDirDegree(sead::Quatf*, const sead::Quatf&, f32);
307void rotateQuatLocalDirDegree(sead::Quatf*, const sead::Quatf&, s32, f32);
308void rotateQuatMoment(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&);
309void rotateQuatMomentDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&);
310void rotateQuatRollBall(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&,
311 const sead::Vector3f&, f32);
312void calcMomentRollBall(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
313bool turnQuat(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, const sead::Vector3f&, f32);
314bool turnQuatXDirRadian(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
315bool turnQuatYDirRadian(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
316bool turnQuatZDirRadian(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
317void turnQuatXDirRate(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
318void turnQuatYDirRate(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
319void turnQuatZDirRate(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
320void tiltQuatDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, const sead::Vector3f&,
321 f32);
322void tiltQuatXDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
323void tiltQuatYDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
324void tiltQuatZDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
325bool turnQuatWithAxisDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&,
326 const sead::Vector3f&, const sead::Vector3f&, f32);
327bool turnQuatXDirWithYDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
328bool turnQuatXDirWithZDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
329bool turnQuatYDirWithZDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
330bool turnQuatYDirWithXDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
331bool turnQuatZDirWithXDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
332bool turnQuatZDirWithYDirDegree(sead::Quatf*, const sead::Quatf&, const sead::Vector3f&, f32);
333bool turnQuatZDirToTargetWithAxis(sead::Quatf*, const sead::Vector3f&, const sead::Vector3f&, f32);
334bool turnQuatFrontToDirDegreeH(sead::Quatf*, const sead::Vector3f&, f32);
335void rotateQuatAndTransDegree(sead::Quatf*, sead::Vector3f*, const sead::Quatf&,
336 const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&,
337 f32);
338bool turnVecToVecDegree(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
339void turnVecToVecRate(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
340bool turnVecToVecCos(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32,
341 const sead::Vector3f&, f32);
342bool turnVecToVecCosOnPlane(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
343 const sead::Vector3f&, f32);
344bool turnVecToVecCosOnPlane(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32);
345void rotateVectorCenterDegree(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
346 const sead::Vector3f&, f32);
347void rotateVectorDegreeX(sead::Vector3f*, f32);
348void rotateVectorDegreeY(sead::Vector3f*, f32);
349void rotateVectorDegreeZ(sead::Vector3f*, f32);
350void rotateVectorQuat(sead::Vector3f*, const sead::Quatf&);
351f32 calcAreaTriangle(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&);
352void createBoundingBox(const sead::Vector3f*, u32, sead::Vector3f*, sead::Vector3f*);
353void updateBoundingBox(sead::Vector3f, sead::Vector3f*, sead::Vector3f*);
354f32 calcDistanceToFarthestBoundingBoxVertex(const sead::Vector3f&, const sead::Vector3f&,
355 const sead::Vector3f&);
356void calcSphereMargeSpheres(sead::Vector3f*, f32*, const sead::Vector3f&, f32,
357 const sead::Vector3f&, f32);
358bool calcCrossLinePoint(sead::Vector2f*, const sead::Vector2f&, const sead::Vector2f&,
359 const sead::Vector2f&, const sead::Vector2f&);
360f32 calcSquaredDistanceSegmentToSegment(const sead::Vector3f&, const sead::Vector3f&,
361 const sead::Vector3f&, const sead::Vector3f&,
362 sead::Vector3f*, sead::Vector3f*);
363f32 calcSquaredDistancePointToSegment(const sead::Vector3f&, const sead::Vector3f&,
364 const sead::Vector3f&);
365f32 calcDistancePointToSegment(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&);
366void calcPerpendicFootToLineInside(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
367 const sead::Vector3f&);
368void calcClosestSegmentPoint(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
369 const sead::Vector3f&);
370f32 calcCylinderRadiusDot(const sead::Vector3f&, const sead::Vector3f&, f32);
371bool checkHitSemilinePlane(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
372 const sead::Vector3f&, const sead::Vector3f&);
373bool checkHitSegmentPlane(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
374 const sead::Vector3f&, const sead::Vector3f&, bool);
375bool checkHitLinePlane(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
376 const sead::Vector3f&, const sead::Vector3f&);
377bool checkHitSegmentSphere(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&, f32,
378 sead::Vector3f*, sead::Vector3f*);
379bool checkHitSegmentSphereNearDepth(const sead::Vector3f&, const sead::Vector3f&,
380 const sead::Vector3f&, f32, sead::Vector3f*, sead::Vector3f*);
381bool checkInCylinder(const sead::Vector3f&, const sead::Vector3f&, f32, const sead::Vector3f&, f32);
382bool checkHitSegmentCylinder(const sead::Vector3f&, f32, const sead::Vector3f&, f32,
383 const sead::Vector3f&, const sead::Vector3f&, sead::Vector3f*,
384 sead::Vector3f*);
385bool checkHitHalfLineSphere(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&,
386 f32);
387
388} // namespace al
389
390namespace Intersect {
391
392bool calcX(sead::Vector3f* outVec, f32 value, const sead::Vector3f& vectorA,
393 const sead::Vector3f& vectorB, const sead::Vector3f& min, const sead::Vector3f& max);
394bool calcY(sead::Vector3f* outVec, f32 value, const sead::Vector3f& vectorA,
395 const sead::Vector3f& vectorB, const sead::Vector3f& min, const sead::Vector3f& max);
396bool calcZ(sead::Vector3f* outVec, f32 value, const sead::Vector3f& vectorA,
397 const sead::Vector3f& vectorB, const sead::Vector3f& min, const sead::Vector3f& max);
398
399} // namespace Intersect
400
401namespace al {
402
403bool checkHitSegmentBox(const sead::Vector3f&, const sead::Vector3f&, const sead::BoundBox3f&,
404 sead::Vector3f*);
405bool checkHitPointCone(const sead::Vector3f&, const sead::Vector3f&, const sead::Vector3f&, f32,
406 f32);
407bool checkHitSphereCone(const sead::Vector3f&, f32, const sead::Vector3f&, const sead::Vector3f&,
408 f32, f32);
409bool checkHitSphereSpotLight(const sead::Vector3f&, f32, const sead::Vector3f&,
410 const sead::Vector3f&, f32, f32);
411bool calcBoundingSphereSpotLight(sead::Vector3f*, f32*, const sead::Vector3f&,
412 const sead::Vector3f&, f32, f32);
413void calcBoundingSphereBox3f(sead::Vector3f*, f32*, const sead::BoundBox3f&);
414void calcArrowAabb(sead::BoundBox3f*, const sead::Vector3f&, const sead::Vector3f&);
415bool isNearCollideSphereAabb(const sead::Vector3f&, f32, const sead::BoundBox3f&);
416void calcBoxFacePoint(sead::Vector3f[4], const sead::BoundBox3f&, Axis);
417void calcBoxFacePoint(sead::Vector3f[4], const sead::BoundBox3f&, Axis, const sead::Matrix34f&);
418void calcBoxFacePoint(sead::Vector3f[4], const sead::BoundBox3f&, Axis, const sead::Quatf&,
419 const sead::Vector3f&);
420void calcFittingBoxPoseEqualAxisAll(sead::Quatf*, const sead::Quatf&, const sead::Quatf&);
421void calcFittingBoxPoseEqualAxisNone(sead::Quatf*, const sead::Quatf&, const sead::Quatf&);
422void calcFittingBoxPoseEqualAxisTwo(sead::Quatf*, const sead::Quatf&, const sead::Quatf&, s32);
423void calcFittingBoxPose(sead::Quatf*, const sead::BoundBox3f&, const sead::Quatf&,
424 const sead::Quatf&);
425f32 calcSquaredDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&, const sead::Vector3f&);
426f32 calcDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&, const sead::Vector3f&);
427f32 calcSquaredDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&, const sead::Vector3f&,
428 const sead::BoundBox3f&);
429f32 calcDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&, const sead::Vector3f&,
430 const sead::BoundBox3f&);
431f32 calcSquaredDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&);
432f32 calcDistanceToObb(const sead::Vector3f&, const sead::Matrix34f&);
433void calcObbCorners(sead::Vector3f*, const sead::Matrix34f&, const sead::BoundBox3f&);
434bool calcTriangleInteriorAngleDegree(f32*, f32*, f32*, f32, f32, f32);
435bool calcBetweenTwoLinkMtx(sead::Matrix34f*, sead::Matrix34f*, sead::Matrix34f*,
436 const sead::Vector3f&, const sead::Vector3f&, f32, f32);
437bool calcBetweenTwoLinkPos(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&, f32, f32,
438 const sead::Vector3f&);
439bool calcReflectionVector(sead::Vector3f*, const sead::Vector3f&, f32, f32);
440void calcReverseVector(sead::Vector3f*, const sead::Vector3f&, f32);
441void calcParabolicFunctionParam(f32*, f32*, f32, f32 verticalDistance);
442f32 calcConvergeVibrationValue(f32, f32, f32, f32, f32);
443bool calcSphericalPolarCoordPY(sead::Vector2f*, const sead::Vector3f&, const sead::Vector3f&,
444 const sead::Vector3f&);
445void calcBezierPoint(sead::Vector3f*, const sead::Vector3f&, const sead::Vector3f&,
446 const sead::Vector3f&, const sead::Vector3f&, f32);
447f32 calcSpringDumperForce(f32, f32, f32, f32);
448f32 convertSpringEnergyToSpeed(f32, f32, f32);
449const char* axisIndexToString(s32);
450void visitCellsOverlapped(const sead::Vector3f&, const sead::Vector3f&, f32,
451 const VisitCellCallBack&);
452f32 calcMultValueToDestination(u32, f32, f32);
453f32 getHaltonSequence(u32, u32);
454f32 calcFractal(f32, f32, u32, f32, f32, f32, bool);
455f32 calcMultiFractal(f32, f32, f32, u32, f32, f32, f32, bool);
456f32 calcNormalDistribution(f32, f32, f32);
457bool calcVecViewInput(sead::Vector3f*, const sead::Vector2f&, const sead::Vector3f&,
458 const sead::Matrix34f*);
459bool calcDirViewInput(sead::Vector3f*, const sead::Vector2f&, const sead::Vector3f&,
460 const sead::Matrix34f*);
461bool calcVecViewInput2D(sead::Vector3f*, const sead::Vector2f&, const sead::Vector3f&,
462 const sead::Matrix34f*);
463bool calcDirViewInput2D(sead::Vector3f*, const sead::Vector2f&, const sead::Vector3f&,
464 const sead::Matrix34f*);
465void calcBendPosAndFront(sead::Vector3f*, sead::Vector3f*, sead::Vector3f&, f32,
466 const sead::Vector3f&, const sead::Vector3f&, f32);
467void calcCirclePointPicking(sead::Vector2f* outPoint, f32 x, f32 y);
468void pickUniformPointsOnCircleHammersley(sead::Vector2f* outPoint, f32 x, f32 y);
469void calcDiskPointPicking(sead::Vector2f* outPoint, f32 radius, f32 angle);
470void pickUniformPointsOnDiskHammersley(sead::Vector2f* outPoint, u32 x, u32 y);
471void pickUniformPointOnDisk(sead::Vector2f* outPoint);
472void calcSpherePointPicking(sead::Vector3f* outPoint, f32 x, f32 y);
473void pickUniformPointOnSphere(sead::Vector3f* outPoint);
474void makeBayerMatrix(s32*, s32);
475u16 f32ToF16(f32);
476f32 f16ToF32(u16);
477
478} // namespace al
479