为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
蝴蝶刀刀 2019-12-16 09:52:10
C ++中的atan和atan2有什么区别?atan和atan2C ++ 和有什么不一样?
查看完整描述

4 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-12-16
?
SMILET

TA贡献1796条经验 获得超4个赞

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


tan(α) = sin(α) / cos(α)

然后根据提供给函数的角度区分四个象限。的符号sin,cos并且tan具有以下关系(我们忽略的精确倍数π/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)函数实际上带有y和x参数,这是在y和x轴上具有长度v和角度的向量的投影α,即


y = v * sin(α)

x = v * cos(α)

给出关系


y/x = tan(α)

结论: atan(y/x)保留了一些信息,只能假定输入来自象限I或IV。相反,atan2(y,x)获取所有数据并因此可以解析正确的角度。


查看完整回答
反对 回复 2019-12-16
?
FFIVE

TA贡献1797条经验 获得超6个赞

实际值以弧度为单位,但以度为单位来解释,则为:

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

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

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


查看完整回答
反对 回复 2019-12-16
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

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

注意,由于符号的含糊性,函数无法确定确定象限中的角度仅按其切线值下降(仅atan)。如果需要确定象限,则可以使用atan2。


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 1882 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信