C 语言里 double atan2(double y,double x) 返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。返回值的单位为弧度,取值范围为(-π, π]。结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。若要用度表示反正切值,请将结果再乘以 180/π。另外要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。
例子:
#include "stdio.h"
#include "math.h"
#include<iostream>
using namespace std;
double PI = 3.1415926535897932384626433832795;
struct Point
{
int x;
int y;
}; //最后的分号千万不能省略
int main()
{
struct Point P1, P2, P3, P4;
P1.x = 20, P1.y = 30; //第1象限点
P2.x = -45, P2.y = 23; //第2象限点
P3.x = -73, P3.y = -38; //第3象限点
P4.x = 29, P4.y = -47; //第4象限点
cout << "第1象限:P1.x P1.y" <<":"<< P1.x <<" "<< P1.y << endl;
cout << "atan2: " << atan2(P1.y, P1.x) * 180 / PI << endl;
cout << "第2象限:P2.x P2.y" <<":"<< P2.x <<" "<< P2.y << endl;
cout << "atan2: " << atan2(P2.y, P2.x) * 180 / PI << endl;
cout << "第3象限:P3.x P3.y" <<":"<< P3.x <<" "<< P3.y << endl;
cout << "atan2: " << atan2(P3.y, P3.x) * 180 / PI << endl;
cout << "第4象限:P4.x P4.y" <<":"<< P4.x <<" "<< P4.y << endl;
cout << "atan2: " << atan2(P4.y, P4.x) * 180 / PI << endl;
return 0;
}