diff --git a/Source/OpenTK/Math/Vector3.cs b/Source/OpenTK/Math/Vector3.cs
index 8a096653..80459fa8 100644
--- a/Source/OpenTK/Math/Vector3.cs
+++ b/Source/OpenTK/Math/Vector3.cs
@@ -1205,7 +1205,9 @@ namespace OpenTK
/// Note that the returned angle is never bigger than the constant Pi.
public static float CalculateAngle(Vector3 first, Vector3 second)
{
- return (float)System.Math.Acos((Vector3.Dot(first, second)) / (first.Length * second.Length));
+ float result;
+ CalculateAngle(ref first, ref second, out result);
+ return result;
}
/// Calculates the angle (in radians) between two vectors.
@@ -1217,7 +1219,7 @@ namespace OpenTK
{
float temp;
Vector3.Dot(ref first, ref second, out temp);
- result = (float)System.Math.Acos(temp / (first.Length * second.Length));
+ result = (float)System.Math.Acos(MathHelper.Clamp(temp / (first.Length * second.Length), -1.0, 1.0));
}
#endregion
diff --git a/Source/OpenTK/Math/Vector3d.cs b/Source/OpenTK/Math/Vector3d.cs
index 0b281625..fa3dd95b 100644
--- a/Source/OpenTK/Math/Vector3d.cs
+++ b/Source/OpenTK/Math/Vector3d.cs
@@ -1203,7 +1203,9 @@ namespace OpenTK
/// Note that the returned angle is never bigger than the constant Pi.
public static double CalculateAngle(Vector3d first, Vector3d second)
{
- return System.Math.Acos((Vector3d.Dot(first, second)) / (first.Length * second.Length));
+ double result;
+ CalculateAngle(ref first, ref second, out result);
+ return result;
}
/// Calculates the angle (in radians) between two vectors.
@@ -1215,7 +1217,7 @@ namespace OpenTK
{
double temp;
Vector3d.Dot(ref first, ref second, out temp);
- result = System.Math.Acos(temp / (first.Length * second.Length));
+ result = System.Math.Acos(MathHelper.Clamp(temp / (first.Length * second.Length), -1.0, 1.0));
}
#endregion