零基础 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
函数的功能是求某个弧度对应的正弦值,而反正切函数 atan
与 tan
函数相反;
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)
注意:返回 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
*/
三.猜你喜欢
- C语言 数组下标越界和内存溢出区别
- C语言 使用指针遍历数组
- C语言 指针和数组区别
- C语言 指针数组和数组指针区别
- C语言 野指针
- C语言 函数值传递和址传递
- C语言 函数不定长参数
- C语言 函数指针
- C语言 指针函数
- C语言 回调函数 callback
- C语言 #pragma once
- C语言 #include <> 与 #include “” 区别
- C语言 const 修饰函数参数
- C语言 const 和 define 区别
- C语言 #运算符
- C语言 ##运算符
- C语言 __VA_ARGS__
- C语言 ##__VA_ARGS__
- C语言 函数不定长参数 ##__VA_ARGS__经典案例
- C语言 va_start / va_end / va_arg 自定义 printf 函数
- C语言 main 函数
- C语言 main 函数参数 main(int argc, char *argv[])
- C语言 局部变量
- C语言 全局变量
- C语言 全局变量和局部变量区别
- C语言 static
- C语言 extern
- C/C++ Unicode 和多字节区别
- C/C++ wprintf 输出中文乱码
- C/C++ char 和 wchar_t 相互转换
ChatGPT 3.5 国内中文镜像站免费使用啦
暂无评论内容