当前位置:  开发笔记 > 编程语言 > 正文

在C++中,atan和atan2有什么区别?

如何解决《在C++中,atan和atan2有什么区别?》经验,为你挑选了5个好方法。

atanatan2C++有什么区别?



1> Mehrwolf..:

从学校数学我们知道切线有定义

tan(?) = sin(?) / cos(?)

我们根据我们提供给功能的角度来区分四个象限.标志sin,costan有以下关系(我们忽略了确切的倍数?/2):

  Quadrant    Angle              sin   cos   tan
-------------------------------------------------
  I           0    < ? < ?/2      +     +     +
  II          ?/2  < ? < ?        +     -     -
  III         ?    < ? < 3?/2     -     -     +
  IV          3?/2 < ? < 2?       -     +     -

鉴于值tan(?)是正的,我们无法区分角度是来自第一或第三象限,如果它是负的,它可能来自第二或第四象限.因此,按照惯例,无论切线的原始输入如何,都会atan()从第一个或第四个象限(即-?/2 <= atan() <= ?/2)返回一个角度.

为了获得完整的信息,我们不能使用除法的结果,sin(?) / cos(?)但我们必须分别查看正弦和余弦的值.这是做什么的atan2().这需要两者的sin(?)cos(?),并通过添加解决所有四个象限?到的结果,atan()每当余弦为负.

备注:atan2(y, x)函数实际上采用a y和a x参数,即在y轴和x轴上具有长度v和角度的向量的投影?,即

y = v * sin(?)
x = v * cos(?)

给出了这种关系

y/x = tan(?)

结论: atan(y/x)阻止了一些信息,只能假设输入来自象限I或IV.相反,atan2(y,x)获取所有数据,从而可以解决正确的角度.


一个小细节,范围`-π/ 2 <= atan()<=π/ 2`实际上包括来自象限II的一个点('pi/2`).

2> Chris Jester..:

std::atan2允许计算所有四个象限的反正切值.std::atan只允许从象限1和4计算.



3> Laserallan..:

另外要提到的是,atan2使用类似的表达式计算切线时更稳定,atan(y / x)并且x为0或接近0.


查看http://en.wikipedia.org/wiki/Atan2查看历史和动机部分.

4> Keugyeol..:

实际值以弧度为单位,但要以度为单位解释它们将是:

atan =给出-90到90之间的角度值

atan2 =给出-180和180之间的角度值

对于我的工作涉及各种角度的计算,例如导航中的航向和方位,atan2在大多数情况下都可以完成工作.



5> Roman M..:

atan(x)返回x的反正切的主值,以弧度表示.

atan2(y,x)返回y/x的反正切的主值,以弧度表示.

请注意,由于符号模糊,函数无法确定角度在哪个象限中仅由其正切值(仅atan)下降.如果需要确定象限,可以使用atan2.


atan2(x,y) - > atan2(y,x)
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有