两个2d向量之间的角度,两个方法之间的差异?

时间:2010-04-18 23:48:22

标签: 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);
}

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);
}

3 个答案:

答案 0 :(得分:16)

这是因为第一种方法是正确的,而第二种方法是不正确的。

您可能会注意到反余弦函数有时写成“acos”,有时写成“cos -1 ”。这是一个数学符号的怪癖:“cos -1 ”实际上是反余弦,而不是余弦的倒数(这是正割)。

但是,如果你看到“cos 2 ”,那么这就是余弦的平方,“cos 3 ”是余弦的立方。三角函数的符号这种方式很奇怪。大多数操作员使用上标来表示重复申请。

答案 1 :(得分:5)

Math.Acos(divOperation)不等同于1/Math.Cos(divOperation)arccos是cos的inverse function,而不是乘法逆。

答案 2 :(得分:3)

可能是因为acos(x)≠1 / cos(x)。