summaryrefslogtreecommitdiffhomepage
path: root/src/raymath.h
diff options
context:
space:
mode:
authorBrian E <[email protected]>2023-09-21 22:48:48 +0100
committerGitHub <[email protected]>2023-09-21 23:48:48 +0200
commit577a8de7c059504178a6e5a749d52f543ba199fc (patch)
treee2e37386b5cc31285358d4f474346f91c956a3a2 /src/raymath.h
parenta2b3b1ebe43cdf394b49f901cbaedb2c87959168 (diff)
downloadraylib-577a8de7c059504178a6e5a749d52f543ba199fc.tar.gz
raylib-577a8de7c059504178a6e5a749d52f543ba199fc.zip
[raymath] Added macros for EPSILON on each function it's used in (#3330)
* Added macros for EPSILON This is so the functions can be easily copied and used. * used `#if !defined()` instead of `#ifndef` --------- Co-authored-by: Brian-E <[email protected]>
Diffstat (limited to 'src/raymath.h')
-rw-r--r--src/raymath.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/raymath.h b/src/raymath.h
index 48bae01a..db04c51e 100644
--- a/src/raymath.h
+++ b/src/raymath.h
@@ -214,6 +214,10 @@ RMAPI float Wrap(float value, float min, float max)
// Check whether two given floats are almost equal
RMAPI int FloatEquals(float x, float y)
{
+#if !defined(EPSILON)
+ #define EPSILON 0.000001f
+#endif
+
int result = (fabsf(x - y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(x), fabsf(y))));
return result;
@@ -506,6 +510,10 @@ RMAPI Vector2 Vector2ClampValue(Vector2 v, float min, float max)
// Check whether two given vectors are almost equal
RMAPI int Vector2Equals(Vector2 p, Vector2 q)
{
+#if !defined(EPSILON)
+ #define EPSILON 0.000001f
+#endif
+
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y)))));
@@ -1090,6 +1098,10 @@ RMAPI Vector3 Vector3ClampValue(Vector3 v, float min, float max)
// Check whether two given vectors are almost equal
RMAPI int Vector3Equals(Vector3 p, Vector3 q)
{
+#if !defined(EPSILON)
+ #define EPSILON 0.000001f
+#endif
+
int result = ((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z)))));
@@ -1846,6 +1858,10 @@ RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount)
{
Quaternion result = { 0 };
+#if !defined(EPSILON)
+ #define EPSILON 0.000001f
+#endif
+
float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w;
if (cosHalfTheta < 0)
@@ -2153,6 +2169,10 @@ RMAPI Quaternion QuaternionTransform(Quaternion q, Matrix mat)
// Check whether two given quaternions are almost equal
RMAPI int QuaternionEquals(Quaternion p, Quaternion q)
{
+#if !defined(EPSILON)
+ #define EPSILON 0.000001f
+#endif
+
int result = (((fabsf(p.x - q.x)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.x), fabsf(q.x))))) &&
((fabsf(p.y - q.y)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.y), fabsf(q.y))))) &&
((fabsf(p.z - q.z)) <= (EPSILON*fmaxf(1.0f, fmaxf(fabsf(p.z), fabsf(q.z))))) &&