-2

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如果我按照我习惯的方式定义自己的工作方式,会有什么问题吗?

4

3 回答 3

4

你所说的“平常”根本不平常,只是你在高中学到的东西。它绝不会定义我们“应该”从编程语言中的三角函数中得到什么。您还将了解到 x/y 坐标 (0,0) 位于图形的中心,而不是左上角,因为曾经发明的每种图形编程语言都会给您 =)

atan2 函数实际上并不是真正的函数,它是一种特殊的编程事物。它不是atan,而是“atan 函数的改进版本”,它为我们提供了向量(由它的 dy/dx 值定义)与水平线之间的角度。

您不需要将结果转换为您习惯的结果,您需要习惯编程语言如何使用三角函数。知道这意味着它将您从 atan2 返回的角度插入代码中,这意味着它将完全按照您的期望进行。atan2给你一个向量和水平线之间的角度,并且与函数没有任何关系(嗯......非常少)atan=)

于 2013-09-03T01:07:40.927 回答
3

根据定义,约定不需要理由。他们只需要保持一致。

但约定有意义的一个原因是对称性。对称范围通常会简化代码。

例如,atan2经常用于计算“转角”。即你有一个向量(比如你想让汽车行驶的方向)在另一个坐标系中表示(沿着汽车当前行驶方向的向量)。坐标的thenatan2产生一个角度,如果为正,则为左转,如果为负,则为右转,如果直行,则为零。幅度为您提供转弯的“硬度”。0..2pi 范围没有这些优良品质。

于 2013-09-03T01:19:26.200 回答
0

答案简单直观。

在标准数学中,您的 y 坐标在向下时为负,在向上时为正。对于计算机屏幕坐标,您的 y 坐标向下时为正,向上时为负。当从标准数学坐标转到屏幕坐标时,您可以有效地将 Y 翻转到水平轴上。X 坐标保持不变。

现在取标准数学中 atan2 定义的沿圆的角度。将这些角度翻转到水平轴上,并标记顺时针和逆时针反转。所以实际上这不是atan2的问题,而是在定义坐标系时向上或向下时Y是正数的约定不同。显然,Math.atan2 为其坐标系选择了屏幕坐标约定而不是理论数学约定,鉴于其最常见的用途,其原因应该是显而易见的。另一方面,Matlab 编程语言使用坐标系和 atan2 的标准数学约定,考虑到其最常见的用途,这也是合适的。

于 2014-02-20T09:02:40.657 回答