c++中的atan和atan2有什么区别?


当前回答

atan(x)返回x的arctan的主值,用弧度表示。

atan2(y,x)返回y/x的arctan的主值,用弧度表示。

请注意,由于符号的模糊性,函数不能确定角度落在哪个象限,仅通过其正切值(atan)确定。如果需要确定象限,可以使用atan2。

其他回答

另一件需要提及的事情是,当使用atan(y / x)这样的表达式计算切线时,atan2更稳定,而x等于0或接近0。

Std::atan2允许计算所有四个象限的arctan。Std::atan只允许从象限1和4计算。

下面的Mehrwolf是正确的,但这里有一个启发式可能会有所帮助:

如果你在一个二维坐标系中工作,这是编程反切线的常见情况,你肯定应该使用atan2。它会给出完整的2范围的角度并为你照顾到x坐标中的0。

另一种说法是,atan(y/x)总是错的。只有当参数不能被认为是y/x时才使用atan。

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的所有实值,除非两个实参都为零。

使用atan2,您可以确定这里所述的象限。

如果需要,可以使用atan2 确定象限。