How do I find the angle between two vectors in my situation?
Hi, I've seen many answers here about using Vector3.Angle but it only gives me very weird results.
I have a rotated rectangle zone with the four corners ABCD, and a point P.
I'm trying to find if my point P is inside the rectangle, and I thought of using the angles between the sides vectors and the vector from the corner to the point, to find out if it's on the left side or right side of the edge of the rectangle.
How do I get this angle knowing that I have the following vectors:
Vector AB (B - A) with a Vector to compare it to : Vector AP (P - A)
Vector BC (C - B) with a Vector to compare it to : Vector BP (P - B)
Vector CD (D - C) with a Vector to compare it to : Vector CP (P - C)
Vector DA (A - D) with a Vector to compare it to : Vector DP (P - D)
You can see with Unity's gizmos how the rectangle is rotated, the gizmo is the world space axes.
Note: I don't really care about the Y axis, so using Vector2s should be fine.
I feel like I tried everything, and can't seem to find out why I'm not getting the results I'm looking for.
Here's my code.
bool CheckIfInside(Vector3 pointPosition, Vector3 topRight, Vector3 topLeft, Vector3 bottomRight, Vector3 bottomLeft)
{
topRightToTopLeft = (topLeft - topRight);
topLeftToBottomLeft = (bottomLeft - topLeft);
bottomLeftToBottomRight = (bottomRight - bottomLeft);
bottomRightToTopRight = (topRight - bottomRight);
topRightToPoint = (pointPosition - topRight);
topLeftToPoint = (pointPosition - topLeft);
bottomLeftToPoint = (pointPosition - bottomLeft);
bottomRightToPoint = (pointPosition - bottomRight);
topRightToTopLeftValue = GetValue(topRightToTopLeft, topRightToPoint);
topLeftToBottomLeftValue = GetValue(topLeftToBottomLeft, topLeftToPoint);
bottomLeftToBottomRightValue = GetValue(bottomLeftToBottomRight, bottomLeftToPoint);
bottomRightToTopRightValue = GetValue(bottomRightToTopRight, bottomRightToPoint);
if (topRightToTopLeftValue < 0 && topLeftToBottomLeftValue < 0 && bottomLeftToBottomRightValue < 0 && bottomRightToTopRightValue < 0)
return true;
else
return false;
}
float GetValue(Vector3 A, Vector3 B)
{
return Vector2.Angle(new Vector2(A.x, A.z).normalized, new Vector2(B.x, B.z).normalized);
}
By checking the values of the variables named topRightToTopLeftValue etc, I don't get any value that make sense. That should be the angle between the two vectors of the same color in my image, but that's definitely not working.
Thanks! Marc
Your answer
