C/C++ 反正切函数atan2

最后更新于:2020-09-12 23:21:15

一.反正切函数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);

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

image

θ = 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实战

/************************************************************************/
/*@文件名      : C语言反正切函数atan2.cpp
/*@日  期      : 2020/8/27 19:37
/*@作  者      : 猿说编程
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : C语言反正切函数atan2 - C/C++教程
/************************************************************************/
#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. 三目运算符

2. 逗号表达式

3. char和wchar_t相互转换

4. wprintf输出中文乱码

5. unicode和多字节区别

6. Debug和_DEBUG区别

7. Debug和Release区别

8. _WIN32/WIN32/_WIN64/WIN64区别

9. memcpy/strcpy/strcpy_s区别

10. NaN(Not a Number)

11. INF:infinite)



转载请注明: 猿说编程 »C/C++教程 »反正切函数atan2

赞赏

微信赞赏支付宝赞赏