c++中的atan和atan2有什么区别?
当前回答
下面的Mehrwolf是正确的,但这里有一个启发式可能会有所帮助:
如果你在一个二维坐标系中工作,这是编程反切线的常见情况,你肯定应该使用atan2。它会给出完整的2范围的角度并为你照顾到x坐标中的0。
另一种说法是,atan(y/x)总是错的。只有当参数不能被认为是y/x时才使用atan。
其他回答
另一件需要提及的事情是,当使用atan(y / x)这样的表达式计算切线时,atan2更稳定,而x等于0或接近0。
实际值以弧度为单位,但用度来解释它们将是:
Atan =给出的角度值介于-90和90之间 Atan2 =给出的角度值在-180和180之间
在我的工作中,涉及到在导航中计算航向和方位等各种角度,atan2在大多数情况下可以完成这项工作。
使用atan2,您可以确定这里所述的象限。
如果需要,可以使用atan2 确定象限。
atan(x)返回x的arctan的主值,用弧度表示。
atan2(y,x)返回y/x的arctan的主值,用弧度表示。
请注意,由于符号的模糊性,函数不能确定角度落在哪个象限,仅通过其正切值(atan)确定。如果需要确定象限,可以使用atan2。
Atan2 (y,x)通常用于将直角坐标转换为极坐标。它会给你角度,而根号(x*x+y*y)或者,如果有的话,hypot(y,x)会给你大小。
Atan (x)就是tan的逆。在烦人的情况下,你必须使用atan(y/x)因为你的系统不提供atan2,你必须做额外的检查x和y的符号,以及x=0,为了得到正确的角度。
注意:atan2(y,x)定义为y和x的所有实值,除非两个实参都为零。