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


当前回答

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

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

其他回答

我猜主要的问题是试图弄清楚:“我应该什么时候使用一个或另一个”,或者“我应该使用哪个”,或者“我使用的是正确的”?

我想重要的一点是,atan只是为了在一个右向上的方向曲线上提供正的值,就像时间-距离向量一样。0总是在左下角,thigs只能向上或向右移动,只是速度变慢或变快。Atan不返回负数,所以你不能仅仅通过加/减结果在屏幕上的4个方向上跟踪事物。

Atan2的目的是让原点位于中间,并且可以向后或向下。这就是你在屏幕表示中使用的,因为你想让曲线走向什么方向确实很重要。atan2可以给出负数,因为它的0在中间,它的结果可以用来在4个方向上进行追踪。

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

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

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

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

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

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

实际值以弧度为单位,但用度来解释它们将是:

Atan =给出的角度值介于-90和90之间 Atan2 =给出的角度值在-180和180之间

在我的工作中,涉及到在导航中计算航向和方位等各种角度,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的所有实值,除非两个实参都为零。