在C中,atan2函数具有以下特征:
double atan2( double y, double x );
其他语言也这样做。这是我所知道的唯一一个以Y,X顺序而不是X,Y顺序获取其参数的函数,它会使我经常搞砸,因为当我想到坐标时,我认为(X,Y)。
有谁知道为什么atan2的参数顺序约定是这样的?
答案 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。