C++中atan()与atan2()的区别和用法

【Matlab反正切函数】atan和atan2的不同点 区分matlab的atan和atan2 阅读详情
AI摘要

本文详细介绍了atan和atan2函数的区别与应用场景。atan仅能处理第一和第四象限的角度计算,而atan2通过接收两个参数来准确判断坐标点所在的象限,适用于所有四个象限的角度计算。

区别

atan(x)函数接收一个参数。参数类型可参考下列函数声明。

double atan (double x);
float atan (float x);
long double atan (long double x);
double atan (T x);           // additional overloads for integral types

若有一个坐标A(a,b),则函数参数x=b/a。
atan(x)函数返回以弧度为单位的角度,范围为[-pi/2,+pi/2],注意是包含-pi/2和+pi/2的。该角度为A点和原点的连线与X轴正方向之间的夹角。上方夹角为正,下方夹角为负。由此可以看出,atan()函数只能区分一象限和四象限的点。取一象限和三象限任意一点Ai(ai,bi)计算x=bi/ai,x均为正值。对于二象限和四象限则均为负值。
atan参考
atan2(y,x)函数接收两个参数,即一个坐标值。参数类型可参考下列函数声明。

double atan2 (double y     , double x);
float atan2 (float y      , float x);
long double atan2 (long double y, long double x);
double atan2 (Type1 y      , Type2 x);       // additional overloads

atan2(x)函数返回以弧度为单位的角度,范围为[-pi,+pi],注意是包含-pi和+pi的。函数内部考虑了参数x,y 的符号。所以可以区分坐标点在哪个象限。

atan2参考

使用示例

static double
normalize(double z)
{
  return atan2(sin(z),cos(z));
}

上述代码实现了不管输入多大的角度值(以弧度为单位),输出均落在[-pi,+pi]里。

static double
angle_diff(double a, double b)
{
  double d1, d2;
  a = normalize(a);
  b = normalize(b);
  d1 = a-b;
  d2 = 2*M_PI - fabs(d1);
  if(d1 > 0)
    d2 *= -1.0;
  if(fabs(d1) < fabs(d2))
    return(d1);
  else
    return(d2);
}

上述代码返回a,b之间的夹角,并且返回值总是落在[-pi,+pi]里。总是取从a到b夹角小的那部分,如果从a到b为顺时针旋转返回正值,反之返回负值。

参考文章:
What is the difference between atan and atan2 in C++?

关注公众号《首飞》回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2,机器人学等机器人行业常用技术资料。

每日一题 - 240125 - Convex Checker QOJ - 7730 算法 - 【计算几何 - 凸包】 阅读详情

相关推荐

【雕爷学编程】Arduino 手册之三角函数 atan()

在每个循环中,读取当前点的坐标,计算坐标差值,然后使用反正切函数计算目标角度,最后根据目标角度控制机器人的朝向。因此,在使用atan()函数时,需要考虑输出值的范围。在每个循环中,计算末端点到原点的距离,并使用反正切函数和反余弦函数来计算关节角度,最后控制机器人的关节角度。在实际使用时,需要根据具体需求和数据类型进行适当的调整,并注意输入范围、数据类型和单位转换等细节,以确保正确的计算和应用。在使用atan()函数时,确保使用适当的数据类型来存储输入和输出的值,以避免数据溢出或精度损失的问题。

雕爷学编程 1068

atan2和atan函数的区别

atan2和atan函数

zxnzjccmily的博客 2738

C++中atan和atan2

两者都在cmath函数中。

gyqJulius_Caesar的博客 1938

【C++学习笔记】atan()和atan2()函数使用

提示:atan()和atan2()为基于(math.h)头文件的计算函数,可用于角度归一化。

BTChioa的博客 6772

有限元法(Finite Element Method,FEM)原理详解

有限元法( FEM )是一种流行的方法,用于数值求解工程和数学建模中出现的微分方程。

车手只需要车和手,压力来自轮胎 7万+

基于大模型的自动驾驶智能体:Agent-Driver架构、训练与实战指南

自动驾驶系统正从传统的模块化流水线向以智能体为核心的新范式演进。其核心原理在于将车辆视为一个能够与环境持续交互的自主决策智能体,通过多模态感知、记忆管理和基于大模型的推理能力,实现对复杂交通场景的理解与应对。这一技术价值在于利用大模型的常识推理和泛化能力,有望解决传统方法在长尾场景下面临的挑战。在应用场景上,智能体驱动架构特别适合处理动态交互密集、需高层语义理解的城区驾驶、无保护转弯及突发状况应对。本文聚焦的Agent-Driver项目,正是这一方向的典型实践,它通过融合视觉、语言大模型与强化学习,构建了一

weixin_28729843的博客 529

C++中的atan2与atan

C++中的atan2与atan1. atan(x)2. atan2(y,x)3. atan(y/x)与atan2(y,x)的区别 反正切函数atan(double x)与atan2(double y,double x)存在于C语言的math.h或C++的cmath中。它们返回的值是弧度,要转化为角度得再做处理。 1. atan(x) atan(x)表示求的是x的反正切,其返回值为[-pi/2,+pi/2]之间的一个数。 2. atan2(y,x) atan2(y,x)表示求的是y/x的反正切,其返回值为[-

泠山的博客 5645

Zigbee开发环境搭建:从驱动安装到程序烧录全指南

本文提供了一份详尽的Zigbee开发环境搭建全指南,涵盖从驱动安装到程序烧录的完整流程。重点介绍了使用SmartRF Flash Programmer和仿真器进行程序下载的关键步骤,并详细说明了USB转串口驱动的配置方法,帮助开发者快速构建稳定的Zigbee开发基础。

weixin_29195217的博客 394

c/c++中atan和atan2区别

在目标定位过程中,为了计算同一目标在不同坐标系下的坐标值,可能需要用到角度计算函数atan或atan2. 例如:毫米波雷达给出目标在自身直角坐标系下的坐标(x,y),以及雷达自身的经纬度(longitude,latitude),为了计算目标点的经纬度,可以利用(x,y)计算目标距离和方位角,根据一点经纬度和目标点距离和方位角(ps:一般方位角指与正北方向夹角)得到目标点经纬度。 atan: double atan(double x/y); 函数计算正切值为 x/y 的角的度数,以弧度表示,区间为(-π/2

ieyangxiaoyi的博客 2694

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5343

自学篇--使用keil5.23创建一个stm32工程并编译(固件包自带版本)

之前在本科学习阶段学习过一点51单片机的知识,可是因为基本没有实践过几次现在已经完全忘记了。。前几天老师突然丢给我几个板子说让我把程序编译、烧写环境装好,当时我就震惊了,不过经过三四天的自我摸索,之后参考他人的学习经验,现在已经基本能处理这个问题了,所以为了方便后面的学者,主要也是为了把自己这几天的学习成果记录一下,我在这里把这个过程写下来。(因为刚刚接触,很多原理性的东西都还不懂,只是一个操作步

yang_csdnForOBTS的博客 8659

【c++】atan2()和atan()函数

atan2(): (1)定义: double atan2(double y,double x); atan2() 函数的功能是求 y/x 的反正切值。atan2() 是 atan() 的增强版,能够确定角度所在的象限。 反正切函数 atan2() 和正切函数 tan() 的功能恰好相反:tan() 是已知一个角的弧度值,求该角的正切值;而 atan2() 是已知一个角的正切值(也就是 y/x),求该角的弧度值。 其中 参数y:表示位于 Y 轴上的值;参数x:表示位于 X 轴上的值 注意,x 和 y 同时为

杳杳捞到月亮了吗 3922

【知识图谱】neo4j安装与配置_社区版_2025(附完整安装软件包)

(经历过各种版本NEO4J,遇见杂七杂八的各种问题,也看过非常多很好的教程,特此来分享一下,为大家排排坑。

知识靠谱的博客 2万+

C语言中的atan和atan2

在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x) 他们返回的值是弧度 要转化为角度再自己处理下。 前者接受的是一个正切值(直线的斜率)得到夹角,但是由于正切的规律性本可以有两个角度的但它却只返回一个,因为atan的值域是从-90~90 也就是它只处理一四象限,所以一般不用它。 第二个atan2(d...

weixin_30613343的博客 2039

DeerFlow 系列教程 第三篇 | 核心技术深度剖析:Skills、Memory 与 Context Engineering

摘要化是 Context Engineering 中最关键的组件——它直接决定了长对话的可用性。Skills 技能系统通过渐进式加载的三层模型,在保持系统提示词轻量的同时,支持无限数量的技能扩展。从发现到执行的 10 个生命周期阶段,配合 AI 驱动的安全扫描和多层缓存,构成了一个生产级的技能管理框架。Memory 长期记忆系统通过文件系统持久化、LLM 驱动的信息提取和防抖动异步更新,实现了跨会话的认知持久化。六类事实分类体系和修正信号检测机制,让 Agent 能够从交互中持续学习和改进。

weixin_43674738的博客 280

华为eNSP镜像包全集下载,包含CE6800、CE12800、NE系列等!

你好,这里是网络技术联盟站。昨天给大家介绍了win11、10下安装eNSP最新系列(1.3.00)并完美运行,附下载。从文章发布到发文前,一直有朋友想让瑞哥提供一下华为ENSP镜像包,今天安排!eNSP安装包、以及eNSP中所需要的镜像包(设备包)(CE、CX、NE40E、NE5000E、NE9000、USG)例如:导入一个USG设备包,eNSP中的USG5500和USG6000V都是可以启动的。如果你的报错“40”的话,那么打开Oracle VM VirtualBox这个虚拟机,删除对应报错的虚拟机,然后

网络技术联盟站 3万+

c语言atan的作用,C语言中的atan和atan2

在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x) 他们返回的值是弧度 要转化为角度再自己处理下。前者接受的是一个正切值(直线的斜率)得到夹角,但是由于正切的规律性本可以有两个角度的但它却只返回一个,因为atan的值域是从-90~90 也就是它只处理一四象限,所以一般不用它。第二个atan2(doubl...

weixin_31659095的博客 1892

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

atan(y/x)与atan2(y,x)的区别

C/C++标准库中计算正切的函数有两个,一个是atan(y/x),一个是atan2(y, x)。 atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限: 当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2; 当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi; 当点(x...

gengrenyuan的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

C++中反正切atan2(y,x)与atan(x)的区别

atan2(y,x)与atan(x)的区别

danshiming的博客 765

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

2024年最新atan2与atan的区别,2024C C++春招面试真题详解

简而言之,atan2与atan的区别体现在两个方面:(1) atan2接收两个输入参数;atan只接收一个输入参数(2) atan2对象限敏感,根据两个参数判断它是属于哪个象限并给出对应的角度值,值域范围[-pi, pi];atan对象限不敏感,值域范围为[-pi/2, pi/2]

2401_84978595的博客 887

C++ atan2

double atan2(double y,double x); atan2() 函数的功能是求 y/x 的反正切值。atan2() 是 atan() 的增强版,能够确定角度所在的象限。反正切函数 atan2() 和正切函数 tan() 的功能恰好相反:tan() 是已知一个角的弧度值,求该角的正切值;而 atan2() 是已知一个角的正切值(也就是 y/x),求该角的弧度值。 参数 y表示位于 Y 轴上的值。 x表示位于 X 轴上的值。 注意,x 和 y 同时为 0 时将导致域错误(domain er

苦逼的程序猿 6708

C/C++中的atan和atan2函数

在C语言的math.h或C++中的cmath中有两个求反正切的函数atan(double x)与atan2(double y,double x)  他们返回的值是弧度 要转化为角度再自己处理下。 前者接受的是一个正切值(直线的斜率)得到夹角,但是由于正切的规律性本可以有两个角度的但它却只返回一个,因为atan的值域是从-90~90 也就是它只处理一四象限,所以一般不用它。 第二个atan2(d...

恒持此志成永志 6187
上一篇: C++智能指针的使用
下一篇: AMCL源码解析
首飞爱玩机器人
博客等级 码龄14年 6989粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

首飞爱玩机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值