C/C++ 反正切函数 atan2

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一.反正切函数atan2简介

C 语言中,tan 函数的功能是求某个弧度对应的正弦值,而反正切函数 atantan 函数相反;


tan 函数是已知一个角的弧度值,求该角的正切值;

double tan(double x);  // tan(θ) = y/x;

atan 函数是已知一个角的正切值,求该角的弧度值 ;

double atan(double x); // θ = atan(y/x)

注意:atan 函数 并不能确定角度所在的象限,例如求得的度数是 45°,并不能说明是第一象限的角度,还有可能是第三象限的角度。如果想进一步确定角度所在的象限,请使用 atan2 函数


atan2 函数的功能是求 y / x 的反正切值。与 atan 函数 类似,atan2 函数能够确定角度所在的象限,语法如下:

#include <math.h>
/*
*描述:已知一个角的正切值(也就是 y/x),求该角的弧度值,注意,x 和 y 同时为 0 时将导致域错误(domain error),因为此时的角度是不存在的,或者说是没有意义的。
*参数:
*    [in] y:表示位于 Y 轴上的值
*    [in] x:表示位于 X 轴上的值
*
*返回值:返回以弧度值,表示的 x 的反正切,弧度区间为 [-pi/2,+pi/2]。
*/
double atan2(double y,double x);

注意,x 和 y 同时为 0 时将导致域错误 domain error,因为此时的角度是不存在的,或者说是没有意义的。


θ = atan(y/x)

tan(θ) = y/x

θ = atan2(y,x)
C/C++ 反正切函数 atan2

注意:返回 y / x 的反正切值,以弧度表示,取值范围为(-π,π]。如上图所示,tan(θ) = y/x,θ = atan2(y, x)

当 (x, y) 在象限中时:

当 (x, y) 在第一象限, 0 < θ < π/2
当 (x, y) 在第二象限, π/2 < θ ≤ π
当 (x, y) 在第三象限,-π < θ < -π/2
当 (x, y) 在第四象限, -π/2 < θ < 0


当 (x, y) 在象限的边界(也就是坐标轴)上时:

当 y 是 0,且 x 为非负值, θ = 0
当 y 是 0,且 x 是负值, θ = π
当 y 是正值,且 x 是 0, θ = π/2
当 y 是负值,且 x 是 0,θ = -π/2

由此可知,一般情况下用 atan 即可,当对所求出角度的象限有特殊要求时,应使用 atan2 函数


二.反正切函数atan2实战

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ 反正切函数 atan2
//@Time:2021/09/01 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#include <stdio.h>      /* printf */
#include <math.h>       /* atan2 */

#define PI 3.14159265

int main ()
{
    double x, y, result;
    x = -10.0;
    y = 10.0;
    result = atan2 (y,x) * 180 / PI;
    printf ("The arc tangent for (x=%f, y=%f) is %f degrees\n", x, y, result );
    return 0;
}
/*
The arc tangent for (x=-10.000000, y=10.000000) is 135.000000 degrees
*/

三.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数
  22. C语言 main 函数参数 main(int argc, char *argv[])
  23. C语言 局部变量
  24. C语言 全局变量
  25. C语言 全局变量和局部变量区别
  26. C语言 static
  27. C语言 extern
  28. C/C++ Unicode 和多字节区别
  29. C/C++ wprintf 输出中文乱码
  30. C/C++ char 和 wchar_t 相互转换

未经允许不得转载:猿说编程 » C/C++ 反正切函数 atan2
喜欢(0) 打赏

评论抢沙发

评论前必须登录!

不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!!

开始学习

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏