From fdc28fce80d6e9ae04e900079beba7d79673b25d Mon Sep 17 00:00:00 2001 From: Ray Date: Sun, 2 Jul 2023 20:05:15 +0200 Subject: [PATCH] Reviewed vector2angle example --- examples/others/raymath_vector_angle.c | 7 +++++-- src/raymath.h | 5 ++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/examples/others/raymath_vector_angle.c b/examples/others/raymath_vector_angle.c index 457d69dc3..5de6116f2 100644 --- a/examples/others/raymath_vector_angle.c +++ b/examples/others/raymath_vector_angle.c @@ -49,7 +49,7 @@ int main(void) // Calculate angle between two vectors, considering a common origin (v0) v1 = Vector2Add(v0, (Vector2){ 100.0f, 80.0f }); v2 = GetMousePosition(); - angle = 90 - Vector2LineAngle(v0, v2)*RAD2DEG; + angle = Vector2Angle(Vector2Normalize(Vector2Subtract(v1, v0)), Vector2Normalize(Vector2Subtract(v2, v0)))*RAD2DEG; } else if (angleMode == 1) { @@ -77,7 +77,10 @@ int main(void) DrawLineEx(v0, v1, 2.0f, BLACK); DrawLineEx(v0, v2, 2.0f, RED); - DrawCircleSector(v0, 40.0f, 90 - Vector2LineAngle(v0, v1)*RAD2DEG, angle, 32, Fade(GREEN, 0.6f)); + float startangle = 90 - Vector2LineAngle(v0, v1)*RAD2DEG; + DrawCircleSector(v0, 40.0f, startangle, angle + startangle, 32, Fade(GREEN, 0.6f)); + + //DrawCircleSector(v0, 40.0f, 90 - Vector2LineAngle(v0, v1)*RAD2DEG, angle, 32, Fade(GREEN, 0.6f)); } else if (angleMode == 1) { diff --git a/src/raymath.h b/src/raymath.h index 6a929cf6e..087410ef3 100644 --- a/src/raymath.h +++ b/src/raymath.h @@ -316,16 +316,15 @@ RMAPI float Vector2Angle(Vector2 v1, Vector2 v2) { float result = 0.0f; - float dot = v1.x*v2.x + v1.y*v2.y; // Dot product + float dot = v1.x*v2.x + v1.y*v2.y; // Dot product 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)); + //result = -acosf((v1.x*v2.x + v1.y*v2.y)/(v1Length*v2Length)); return result; }