summaryrefslogtreecommitdiffhomepage
path: root/src/raymath.h
diff options
context:
space:
mode:
authorRay <[email protected]>2023-02-01 11:18:55 +0100
committerRay <[email protected]>2023-02-01 11:18:55 +0100
commita151cbd37ace03a377fd582a29f660dd0ea9f97a (patch)
treed2e87ffae322105cb8becc71f583209fa6584d7e /src/raymath.h
parent89171a26083da40a3a78dc0f1dee466542ed7668 (diff)
downloadraylib-a151cbd37ace03a377fd582a29f660dd0ea9f97a.tar.gz
raylib-a151cbd37ace03a377fd582a29f660dd0ea9f97a.zip
ADDED: `Vector2LineAngle()` #2887
REVIEWED: `Vector2Angle()`
Diffstat (limited to 'src/raymath.h')
-rw-r--r--src/raymath.h23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/raymath.h b/src/raymath.h
index eb244ad4..96c24184 100644
--- a/src/raymath.h
+++ b/src/raymath.h
@@ -306,24 +306,33 @@ RMAPI float Vector2DistanceSqr(Vector2 v1, Vector2 v2)
return result;
}
-// Calculate angle from two vectors
+// Calculate angle between two vectors
+// NOTE: Angle is calculated from origin point (0, 0)
+RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
+{
+ float result = atan2f(v2.y - v1.y, v2.x - v1.x);
+
+ return result;
+}
+
+// Calculate angle defined by a two vectors line
// NOTE: Parameters need to be normalized
// Current implementation should be aligned with glm::angle
-RMAPI float Vector2Angle(Vector2 v1, Vector2 v2)
+RMAPI float Vector2LineAngle(Vector2 start, Vector2 end)
{
float result = 0.0f;
- float dot = v1.x*v2.x + v1.y*v2.y; // Dot product
+ float dot = start.x*end.x + start.y*end.y; // Dot product
- float dotClamp = (dot < -1.0f)? -1.0f : dot; // Clamp
+ float dotClamp = (dot < -1.0f)? -1.0f : dot; // Clamp
if (dotClamp > 1.0f) dotClamp = 1.0f;
result = acosf(dotClamp);
// Alternative implementation, more costly
- //float v1Length = sqrtf((v1.x*v1.x) + (v1.y*v1.y));
- //float v2Length = sqrtf((v2.x*v2.x) + (v2.y*v2.y));
- //float result = -acosf((v1.x*v2.x + v1.y*v2.y)/(v1Length*v2Length));
+ //float v1Length = sqrtf((start.x*start.x) + (start.y*start.y));
+ //float v2Length = sqrtf((end.x*end.x) + (end.y*end.y));
+ //float result = -acosf((start.x*end.x + start.y*end.y)/(v1Length*v2Length));
return result;
}