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)。

。谢谢我已经有一段时间没上高中了。