两个二维向量之间的夹角,两种方法的区别是什么?

8
我有一个代码片段,我想知道为什么第一个方法的结果与第二个方法的结果不同,尽管它们使用相同的输入?
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个回答

16

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

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

然而,如果你见到“cos2”,那么那就是余弦的平方,“cos3”是余弦的立方。三角函数的符号表示方式很奇怪。大多数操作符使用上标表示重复应用。


当然。谢谢!自从我在高中学三角函数以来已经有一段时间了。 - bitcycle

5

Math.Acos(divOperation)并不等同于1/Math.Cos(divOperation)arccos是cos的反函数,而不是乘法逆元。


3

Probably because acos(x) ≠ 1/cos(x).


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接