【问题标题】:Angle between two 2d vectors, diff between two methods?两个二维向量之间的角度,两种方法之间的差异?
【发布时间】:2010-04-18 23:48:22
【问题描述】:

我有这段代码 sn-p,我想知道为什么在相同的输入下,第一种方法的结果与第二种方法的结果不同?

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

【问题讨论】:

    标签: c# vector trigonometry


    【解决方案1】:

    因为第一种方法是正确的,而第二种方法是错误的。

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

    但是,如果您看到“cos2”,那么它就是余弦的平方,而“cos3”是余弦的立方。这种三角函数的符号很奇怪。大多数运算符使用上标表示重复应用。

    【讨论】:

    • 当然。谢谢!我高中时已经有一段时间没有参加三角课了。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2021-07-16
        相关资源
        最近更新 更多