c++中的atan和atan2有什么区别?
当前回答
Std::atan2允许计算所有四个象限的arctan。Std::atan只允许从象限1和4计算。
其他回答
我猜主要的问题是试图弄清楚:“我应该什么时候使用一个或另一个”,或者“我应该使用哪个”,或者“我使用的是正确的”?
我想重要的一点是,atan只是为了在一个右向上的方向曲线上提供正的值,就像时间-距离向量一样。0总是在左下角,thigs只能向上或向右移动,只是速度变慢或变快。Atan不返回负数,所以你不能仅仅通过加/减结果在屏幕上的4个方向上跟踪事物。
Atan2的目的是让原点位于中间,并且可以向后或向下。这就是你在屏幕表示中使用的,因为你想让曲线走向什么方向确实很重要。atan2可以给出负数,因为它的0在中间,它的结果可以用来在4个方向上进行追踪。
下面的Mehrwolf是正确的,但这里有一个启发式可能会有所帮助:
如果你在一个二维坐标系中工作,这是编程反切线的常见情况,你肯定应该使用atan2。它会给出完整的2范围的角度并为你照顾到x坐标中的0。
另一种说法是,atan(y/x)总是错的。只有当参数不能被认为是y/x时才使用atan。
Std::atan2允许计算所有四个象限的arctan。Std::atan只允许从象限1和4计算。
使用atan2,您可以确定这里所述的象限。
如果需要,可以使用atan2 确定象限。
atan(x)返回x的arctan的主值,用弧度表示。
atan2(y,x)返回y/x的arctan的主值,用弧度表示。
请注意,由于符号的模糊性,函数不能确定角度落在哪个象限,仅通过其正切值(atan)确定。如果需要确定象限,可以使用atan2。