注意arctan算出的角度在各象限的情况,坐标系以x为竖轴,以y为横轴。顺时针象限为一,二,三,四。
double azimuth(double x1, double y1, double x2, double y2)//坐标方位角
{
//主函数:
//double x1,y1,x2,y2;
//cout << "坐标(x1,y1)(x2,y2)=";
//cin >> x1 >> y1 >> x2 >> y2;
//azimuth(x1,y1,x2,y2);
const double PI = 3.1415926535;
double x, y, azi;
x = x2 - x1;
y = y2 - y1;
if (fabs(x)<10e-10)//绝对值小于一个微小数相当于x=0;实数判断是否为0时使用。
{
if (fabs(y) < 10e-10)
{
cout << "两点重合";
}
else if(y>0)
{
azi = 1 / 2 * PI;
}
else if (y < 0)
{
azi = 3 / 2 * PI;
}
}
else if (x > 0)
{
if (fabs(y) < 10e-10)
{
azi = 0;
}
else if (y < 0)
{
azi = 2 * PI - fabs(atan(y / x));
}
else if (y > 0)
{
azi = atan(y / x);
}
}
else if (x < 0)
{
if (fabs(y) < 10e-10)
{
azi = PI;
}
else if (y < 0)
{
azi = atan(y / x) + PI;
}
else if (y > 0)
{
azi = PI - fabs(atan(y / x));
}
}
cout << "坐标方位角=" << azi;
return 0;
}