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


当前回答

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

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

其他回答

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

考虑一个直角三角形。我们把斜边标记为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本身只是返回一个正数或负数,仅此而已。

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

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

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

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

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

在我的工作中,涉及到在导航中计算航向和方位等各种角度,atan2在大多数情况下可以完成这项工作。

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

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