Infinity Engine v0.6.20
C++ API Documentation
Loading...
Searching...
No Matches
Math.hpp
1#pragma once
2
3#include <Infinity/api.h>
4#include <Infinity/Types/Math/Vector.hpp>
5
6#include <cmath>
7
9{
11 constexpr float PI = 3.14159265358979323846f;
12 constexpr float TWO_PI = 6.28318530717958647692f;
13 constexpr float HALF_PI = 1.57079632679489661923f;
14 constexpr float INV_PI = 0.31830988618379067154f;
15
16 constexpr double PI_D = 3.14159265358979323846;
17 constexpr double TWO_PI_D = 6.28318530717958647692;
18 constexpr double HALF_PI_D = 1.57079632679489661923;
19 constexpr double INV_PI_D = 0.31830988618379067154;
20
27 constexpr inline float radians(float degrees)
28 {
29 return degrees * (PI / 180.0f);
30 }
31
38 constexpr inline double radians(double degrees)
39 {
40 return degrees * (PI_D / 180.0);
41 }
42
49 constexpr inline float degrees(float radians)
50 {
51 return radians * (180.0f / PI);
52 }
53
60 constexpr inline double degrees(double radians)
61 {
62 return radians * (180.0 / PI_D);
63 }
64
71 inline float normalizeAngle(float angle)
72 {
73 angle = std::fmod(angle + PI, TWO_PI);
74 if (angle < 0.0f)
75 angle += TWO_PI;
76 return angle - PI;
77 }
78
85 inline double normalizeAngle(double angle)
86 {
87 angle = std::fmod(angle + PI_D, TWO_PI_D);
88 if (angle < 0.0)
89 angle += TWO_PI_D;
90 return angle - PI_D;
91 }
92
99 inline float normalizeAngleDegrees(float angle)
100 {
101 angle = std::fmod(angle + 180.0f, 360.0f);
102 if (angle < 0.0f)
103 angle += 360.0f;
104 return angle - 180.0f;
105 }
106
113 inline double normalizeAngleDegrees(double angle)
114 {
115 angle = std::fmod(angle + 180.0, 360.0);
116 if (angle < 0.0)
117 angle += 360.0;
118 return angle - 180.0;
119 }
120
145 Vector3 INFINITY_API_PUBLIC lerp(const Vector3& a, const Vector3& b, float t);
146
159 Vector3 INFINITY_API_PUBLIC mix(const Vector3& a, const Vector3& b, float t);
160
182 Vector3 INFINITY_API_PUBLIC quatToEuler(Quaternion quat);
183
204 Quaternion INFINITY_API_PUBLIC eulerToQuat(Vector3 euler);
205
232 float INFINITY_API_PUBLIC smoothstep(float s1, float s2, float val);
233}
Definition Math.hpp:9
Quaternion INFINITY_API_PUBLIC eulerToQuat(Vector3 euler)
Converts Euler angles to a quaternion.
constexpr float TWO_PI
Definition Math.hpp:12
constexpr float INV_PI
Definition Math.hpp:14
constexpr double INV_PI_D
Definition Math.hpp:19
float INFINITY_API_PUBLIC smoothstep(float s1, float s2, float val)
Smooth Hermite interpolation between two values.
constexpr float degrees(float radians)
Converts radians to degrees (float).
Definition Math.hpp:49
Vector3 INFINITY_API_PUBLIC mix(const Vector3 &a, const Vector3 &b, float t)
Linear interpolation between two 3D vectors (alias for lerp).
constexpr double HALF_PI_D
Definition Math.hpp:18
float normalizeAngle(float angle)
Normalizes an angle in radians to the range [-PI, PI].
Definition Math.hpp:71
constexpr float radians(float degrees)
Converts degrees to radians (float).
Definition Math.hpp:27
Vector3 INFINITY_API_PUBLIC lerp(const Vector3 &a, const Vector3 &b, float t)
Linear interpolation between two 3D vectors.
float normalizeAngleDegrees(float angle)
Normalizes an angle in degrees to the range [-180, 180].
Definition Math.hpp:99
constexpr double PI_D
Definition Math.hpp:16
constexpr double TWO_PI_D
Definition Math.hpp:17
constexpr float HALF_PI
Definition Math.hpp:13
constexpr float PI
Mathematical constants.
Definition Math.hpp:11
Vector3 INFINITY_API_PUBLIC quatToEuler(Quaternion quat)
Converts a quaternion to Euler angles.
Template structure representing a 3-component vector.
Definition Vector3.hpp:82
Template structure representing a 4-component vector.
Definition Vector4.hpp:85