c++中的atan和atan2有什么区别?
当前回答
从学校数学中我们知道了正切的定义
tan(α) = sin(α) / cos(α)
我们根据函数的角度来区分四个象限。sin, cos和tan的符号有以下关系(这里我们忽略π/2的精确倍数):
Quadrant Angle sin cos tan
-------------------------------------------------
I 0 < α < π/2 + + +
II π/2 < α < π + - -
III π < α < 3π/2 - - +
IV 3π/2 < α < 2π - + -
已知tan(α)是正的,我们无法区分这个角是来自第一象限还是第三象限,如果它是负的,它可能来自第二象限或第四象限。因此,按照惯例,atan()返回一个来自第一象限或第四象限的角度(即-π/2 <= atan() <= π/2),而不管原始输入的正切值如何。
为了得到完整的信息,我们不能使用sin(α) / cos(α)除法的结果,但我们必须分别查看sin和cos的值。这就是atan2()所做的。它同时取sin(α)和cos(α),当余弦为负时,通过将π加到atan()的结果中来求解所有四个象限。
注意:atan2(y, x)函数实际上有一个y和一个x参数,这是一个长度为v和角度为α的向量在y轴和x轴上的投影,即。
y = v * sin(α)
x = v * cos(α)
它给出了一个关系
y/x = tan(α)
结论: atan(y/x)保留了一些信息,人们只能假设输入来自象限I或IV。相反,atan2(y,x)获得所有数据,因此可以解析正确的角度。
其他回答
使用atan2,您可以确定这里所述的象限。
如果需要,可以使用atan2 确定象限。
实际值以弧度为单位,但用度来解释它们将是:
Atan =给出的角度值介于-90和90之间 Atan2 =给出的角度值在-180和180之间
在我的工作中,涉及到在导航中计算航向和方位等各种角度,atan2在大多数情况下可以完成这项工作。
另一件需要提及的事情是,当使用atan(y / x)这样的表达式计算切线时,atan2更稳定,而x等于0或接近0。
从学校数学中我们知道了正切的定义
tan(α) = sin(α) / cos(α)
我们根据函数的角度来区分四个象限。sin, cos和tan的符号有以下关系(这里我们忽略π/2的精确倍数):
Quadrant Angle sin cos tan
-------------------------------------------------
I 0 < α < π/2 + + +
II π/2 < α < π + - -
III π < α < 3π/2 - - +
IV 3π/2 < α < 2π - + -
已知tan(α)是正的,我们无法区分这个角是来自第一象限还是第三象限,如果它是负的,它可能来自第二象限或第四象限。因此,按照惯例,atan()返回一个来自第一象限或第四象限的角度(即-π/2 <= atan() <= π/2),而不管原始输入的正切值如何。
为了得到完整的信息,我们不能使用sin(α) / cos(α)除法的结果,但我们必须分别查看sin和cos的值。这就是atan2()所做的。它同时取sin(α)和cos(α),当余弦为负时,通过将π加到atan()的结果中来求解所有四个象限。
注意:atan2(y, x)函数实际上有一个y和一个x参数,这是一个长度为v和角度为α的向量在y轴和x轴上的投影,即。
y = v * sin(α)
x = v * cos(α)
它给出了一个关系
y/x = tan(α)
结论: atan(y/x)保留了一些信息,人们只能假设输入来自象限I或IV。相反,atan2(y,x)获得所有数据,因此可以解析正确的角度。
考虑一个直角三角形。我们把斜边标记为r,水平线为y,垂直线为x。兴趣角α是x和r之间的角。
c++ atan2(y, x)会给出角α的值,单位为弧度。 如果我们只知道或只对y/x感兴趣,而不是y和x单独,则使用Atan。如果p = y/x 然后用atan(p)求α。
您不能使用atan2来确定象限,只有当您已经知道您在哪个象限时才能使用atan2 !特别是正的x和y表示第一象限,正的y和负的x,第二象限等等。Atan或atan2本身只是返回一个正数或负数,仅此而已。