Math.atan2使用角度约定,从右边的-pi / 2开始,在同一点增加直到pi / 2。我们在大多数数学工作中看到的通常的角度符号从右边的0开始,逆时针在同一点开始增加直到pi * 2。
usual Math.atan2(y,x)
right 0/2*pi -2/2*pi
top 1/2*pi -1/2*pi
left 2/2*pi 0
down 3/2*pi 1/2*pi
这不仅是不寻常的,而且与其他三角函数不一致。为什么?如果我定义自己的atan2
按照我习惯的方式工作会有什么问题吗?
答案 0 :(得分:2)
你所说的“通常”根本不常见,只是你在高中时学到的东西。它决不会定义我们从编程语言中的三角函数中获取的“假设”。您还了解到x / y坐标(0,0)位于图形的中心,而不是左上角,因为每种图形编程语言都会为您提供=)
atan2函数实际上并不是一个真正的函数,它是一个特殊的编程事物。它不是atan
,它是“atan函数的改进版本”,它给出了向量(由它的dy / dx值定义)和水平之间的角度。
您不需要将结果转换为您习惯的结果,您需要习惯编程语言如何使用三角函数。将你从atan2返回的角度插入你的代码,知道这意味着它将完全符合你的期望。 atan2
为你提供了一个向量和水平之间的角度,并且没有任何东西(很好......很少)与atan
函数=)
答案 1 :(得分:2)
根据定义,公约不需要理由。他们只需要保持一致。
但是,惯例有意义的一个原因是对称性。对称范围通常可以简化代码。
例如,atan2
经常用于计算"转角"。即你有一个向量(比如你想要一辆汽车去的方向)在另一个向量的坐标系中表示(沿着当前汽车行驶方向的向量)。然后atan2
坐标产生一个角度,如果是正的则是左转,如果是负的则是右转,如果是直的则是0。并且量级为您提供了"硬度"转弯。 0..2pi范围不具备这些优良品质。
答案 2 :(得分:0)
答案简单直观。
在标准数学中,y坐标在向下时为负,在向上时为正。对于计算机屏幕坐标,您的y坐标在向下时为正,在向上时为负。因此,当从标准数学坐标到屏幕坐标时,您可以有效地在水平轴上翻转Y. X坐标保持不变。
现在取标准数学中atan2定义的圆周角。将这些角度翻转到水平轴上,并标记为顺时针和逆时针反转。所以事实上它并不是atan2的问题,而是在上升时或在定义坐标系时下降时Y是正的惯例的差异。显然Math.atan2为其坐标系选择了屏幕坐标约定而不是理论数学约定,并且鉴于其最常见的用途,其原因应该是显而易见的。另一方面,Matlab编程语言使用坐标系和atan2的标准数学约定,这也适用于最常见的用途。