为什么atan2 Y,X而不是X,Y的参数?

时间:2009-06-25 18:58:47

标签: math arguments conventions

在C中,atan2函数具有以下特征:

double atan2( double y, double x );

其他语言也这样做。这是我所知道的唯一一个以Y,X顺序而不是X,Y顺序获取其参数的函数,它会使我经常搞砸,因为当我想到坐标时,我认为(X,Y)。

有谁知道为什么atan2的参数顺序约定是这样的?

6 个答案:

答案 0 :(得分:26)

因为我认为它与arctan(y / x)有关,所以y出现在顶部。

这是一个很好的链接:Angles and Directions

答案 1 :(得分:12)

我的假设一直是因为三角定义,即

tan(theta) = opposite / adjacent

当使用来自原点的规范角度时,相反的是始终为Y且相邻的总是X,所以:

atan2(opposite, adjacent) = theta

也就是说,这样做是因为没有关于数学定义的排序混淆。

答案 2 :(得分:1)

假设一个矩形三角形,其相对边称为y,相邻边称为x:

tan(角度)= y / x

arctan(tan(angle))= arctan(y / x)

答案 3 :(得分:1)

这是因为在学校里,计算梯度的助记符
上升超过,或者换句话说是dy / dx,或者更简单地说是y / x。

这个命令已经进入了反正切函数的论证。

所以这是一个历史人工制品。对我而言,这取决于我的想法 关于我何时使用atan2。如果我在思考差异,我就是对的 如果我正在考虑坐标对,我就错了。

答案 4 :(得分:0)

顺序在excel中是atan2(X,Y),所以我认为相反的顺序是编程问题。通过将'2'放在'n'和'('之间,然后将'/'替换为',',只需2个操作,就可以轻松地将atan(Y / X)更改为atan2(Y,X)。相反的顺序将执行4个操作,而某些操作将更为复杂(剪切和粘贴)。

我经常在Excel中计算数学,然后将其移植到.NET,因此有时会挂在atan2上。最好以一种方式或另一种方式对atan2进行标准化。

答案 5 :(得分:0)

如果atan2的参数颠倒了,将会更加方便。然后,您无需担心在计算极角时翻转参数。相当于Mathematica的是:https://reference.wolfram.com/language/ref/ArcTan.html

时光倒流,FORTRAN具有ATAN2函数,其参数顺序不那么方便,在this reference manual中(有点不准确)被描述为arctan(arg1 / arg2)。

可以认为,最初的创建者被固定在atan2(arg1,arg2)上(或多或少)是arctan(arg1 / arg2),并且该决定被盲目地从FORTRAN复制到C到C ++,Python,Java和JavaScript。