C# 两个二维向量之间的角度,两种方法之间的差异?
我得到了这个代码片段,我想知道为什么在相同的输入下,第一个方法的结果与第二个方法的结果不同C# 两个二维向量之间的角度,两种方法之间的差异?,c#,vector,trigonometry,C#,Vector,Trigonometry,我得到了这个代码片段,我想知道为什么在相同的输入下,第一个方法的结果与第二个方法的结果不同 public double AngleBetween_1(vector a, vector b) { var dotProd = a.Dot(b); var lenProd = a.Len*b.Len; var divOperation = dotProd/lenProd; return Math.Acos(divOperation) * (180.0 / Math.PI); } pub
public double AngleBetween_1(vector a, vector b) {
var dotProd = a.Dot(b);
var lenProd = a.Len*b.Len;
var divOperation = dotProd/lenProd;
return Math.Acos(divOperation) * (180.0 / Math.PI);
}
public double AngleBetween_2(vector a, vector b) {
var dotProd = a.Dot(b);
var lenProd = a.Len*b.Len;
var divOperation = dotProd/lenProd;
return (1/Math.Cos(divOperation)) * (180.0 / Math.PI);
}
这是因为第一种方法是正确的,而第二种方法是错误的 您可能注意到,反余弦函数有时写为“acos”,有时写为“cos-1”。这是数学符号的一个怪癖:“cos-1”实际上是反余弦,而不是余弦的倒数(即正割)
然而,如果你看到“cos2”,那就是余弦的平方,“cos3”是余弦的立方。三角函数的这种表示法很奇怪。大多数运算符使用上标表示重复应用。
Math.Acos(divOperation)
不等同于1/Math.Cos(divOperation)
。是cos的倒数,不是乘法的倒数。可能是因为acos(x)≠ 1/cos(x)。。谢谢我已经有一段时间没上高中了。