如何解决角度功能偶尔会返回NaN
我有一个用于Unity项目的角度函数,但偶尔会返回NaN,我不明白为什么。我是从互联网上复制此代码的,所以我不太了解它的工作原理
public static float Angle(Vector3 vec1,Vector3 angleVec,Vector3 vec2)
{
float lengthA = Mathf.Sqrt(Mathf.Pow(angleVec.x - vec1.x,2) + Mathf.Pow(angleVec.y - vec1.y,2));
float lengthB = Mathf.Sqrt(Mathf.Pow(vec2.x - angleVec.x,2) + Mathf.Pow(vec2.y - angleVec.y,2));
float lengthC = Mathf.Sqrt(Mathf.Pow(vec2.x - vec1.x,2) + Mathf.Pow(vec2.y - vec1.y,2));
float calc = ((lengthA * lengthA) + (lengthB * lengthB) - (lengthC * lengthC)) / (2 * lengthA * lengthB);
float returnAngle = Mathf.Acos(calc) * Mathf.Rad2Deg;
if (System.Single.IsNaN(returnAngle))
{
Debug.LogError("NAN");
}
return returnAngle;
}
有人可以帮我修复此代码吗
解决方法
余弦函数的范围为[-1,1],因此反余弦函数的范围为[-1,1]。这意味着对于[-1,1]以外的任何x,arccos(x)是未定义的。
如果lengthA
或lengthB
为0,则calc
为无穷大,而acos(infinity)
未定义。
https://dotnetfiddle.net/S3zwr5
您将必须编写一个if
语句来处理这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。