Browse Source

ADDED: `Vector2LineAngle()` #2887

REVIEWED: `Vector2Angle()`
Ray 2 years ago
parent
commit
a151cbd37a
1 changed files with 16 additions and 7 deletions
  1. 16 7
      src/raymath.h

+ 16 - 7
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;
 }