C++中的atan2与atan

C++中的atan2与atan

    • 1. 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的反正切,其返回值为[-pi,pi]之间的一个数。
要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。

返回值是此点与原点连线与 x 方向的夹角(喵的一堆教程坑我)。

3. 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, y) 落入第三象限时,atan2(y, x)的范围是 -pi~-pi/2;
当点(x, y) 落入第四象限时,atan2(y, x)的范围是 -pi/2~0.

而 atan(y/x) 仅仅根据正切值为y/x求出对应的角度 (可以看作仅仅是2象限反正切):

当 y/x > 0 时,atan(y/x)取值范围是 0 ~ pi/2;
当 y/x < 0 时,atan(y/x)取值范围是 -pi/2~0.

故 atan2(y, x) = atan(y/x) 仅仅发生在点 (x, y) 落入第一象限 (x>0, y>0)或第四象限(x>0, y<0)。

举个栗子:
栗1:假设y =1.0, x = -1.0,
则 atan(y/x) = atan(-1.0) = -pi/4, 而 atan2(y, x) = 3*pi/4。

栗2:斜率是1的直线的夹角
cout< cout< cout< 后两个斜率都是1 但是atan只能求出一个45°

你可能感兴趣的:(C/C++,数据结构)