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

Math 为什么atan2的参数是Y,X而不是X,Y?,math,arguments,conventions,Math,Arguments,Conventions,在C中,atan2函数具有以下签名: double atan2( double y, double x ); 其他语言也可以做到这一点。这是我所知道的唯一一个以Y,X顺序而不是X,Y顺序取参数的函数,它经常把我搞砸,因为当我想到坐标时,我想到(X,Y) 有人知道为什么atan2的参数顺序约定是这样的吗?因为我相信它与arctan(y/x)有关,所以y出现在顶部 这里有一个很好的链接来讨论它:我一直认为这是因为trig的定义,即 tan(theta) = opposite / adjacent

在C中,atan2函数具有以下签名:

double atan2( double y, double x );
其他语言也可以做到这一点。这是我所知道的唯一一个以Y,X顺序而不是X,Y顺序取参数的函数,它经常把我搞砸,因为当我想到坐标时,我想到(X,Y)


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

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


这里有一个很好的链接来讨论它:

我一直认为这是因为trig的定义,即

tan(theta) = opposite / adjacent
使用原点的标准角度时,反向始终为Y,相邻始终为X,因此:

atan2(opposite, adjacent) = theta

也就是说,它是这样做的,因此在数学定义方面没有顺序混乱。

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

tan(角度)=y/x


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

这个顺序已经潜入了反正切函数的参数中

所以这是一件历史文物。对我来说,这取决于我的想法
关于何时使用atan2。如果我考虑的是微分,我就正确了
如果我考虑的是坐标对,我就错了。

excel中的顺序是atan2(X,Y),所以我认为相反的顺序是编程的事情。atan(Y/X)可以很容易地更改为atan2(Y,X),方法是在“n”和“(”之间放置一个“2”,并将“/”替换为一个“,”,只执行2次操作。相反的顺序将需要4次操作,其中一些操作将更复杂(剪切和粘贴)


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

如果atan2将其参数反转,将更方便。这样,在计算极角时,您就不必担心参数的翻转。Mathematica equivalent正是这样做的:

早在最早的时候,FORTRAN就有一个ATAN2函数,它的参数顺序不太方便(有点不准确),被描述为arctan(arg1/arg2)


最初的创建者似乎专注于atan2(arg1,arg2)是(或多或少)arctan(arg1/arg2)这个决定是盲目地从FORTRAN复制到C到C++和Python和java和JavaScript。< /P>为什么这被标记为语言不可知的?@ MGRoVES它出现在许多语言中,因为相同的格式出现在很多语言中。“它至少可以追溯到FORTRAN编程语言,目前存在于C编程语言的math.h标准库、Java数学库、C#static math类和其他地方。许多脚本语言,如Perl,都包含C风格的atan2函数。[1]“很抱歉,它把你搞砸了,但如果是(x,y)我在80年代的
BASIC
中写了我的第一篇
Atan2()
,当时我还不知道有什么惯例(我以为我发明了切片面包),我提出了论点
(x,y)
。从那以后,我开始搞砸参数的方向。也许OP也有类似的经历。这都是你熟悉的问题。一些时间迷雾中的程序员认为这样做是有意义的。(为什么是‘atan2’?为什么不是‘angle_’?我过去认为它是反正切平方…)是的,反正切(y/x)经常发生的情况是,如果arctan2取x,y,它会一直把我搞砸。最好把斜杠改成逗号。@alex-这是atan2,因为它需要两个参数,以区别于atan(),后者要求你事先进行y/x除法。这不是唯一的原因,atan()当x和y都为负时,不处理差异,而atan2()处理差异。@1owk3y谢谢,我已修复它。Soh Cah Toa是我的pnemonic:)7年级?你一定没有上过公立学校:)我想知道变量是否标记为dx和dy会更清楚?