C 语言 求经纬度角度
给定任意两点经纬度,计算这两点所在直线与赤道的夹角。希望各位大神能贴出代码 本人刚接触C语言不久!!
[解决办法]
这是我的程序,应该没问题!
输入格式如下:
如果两点的坐标为:东经20度,北纬45和西经160度,南纬45度
则输入:20 e 45 n 160 w 45 s
下面是程序运行结果:
20 e 45 n 160 w 45 s
45
Press any key to continue
- C/C++ code
#include <iostream>#include <math.h>using namespace std;const double PAI = 3.1415926535897932384626433;//如果两点的坐标分别为:东经20度,北纬45和西经160度,南纬45度,则输入"20 e 45 n 160 w 45 s"然后回车。double get_angle(double longitude1, char longitude1_flag, double latitude1, char latitude1_flag, double longitude2, char longitude2_flag, double latitude2, char latitude2_flag){ if(longitude1_flag=='w') { longitude1 = 360-longitude1; } if(latitude1_flag=='s') { latitude1 = -1*latitude1; } if(latitude2_flag=='s') { latitude2 = -1*latitude2; } if(longitude2_flag=='w') { longitude1 = 360-longitude1; } double shita1 = longitude1/180*PAI; double shita2 = longitude2/180*PAI; double fai1 = PAI/2-latitude1/180*PAI; double fai2 = PAI/2-latitude2/180*PAI; double x1 = sin(fai1)*cos(shita1); double x2 = sin(fai2)*cos(shita2); double y1 = sin(fai1)*sin(shita1); double y2 = sin(fai2)*sin(shita2); double z1 = cos(fai1); double z2 = cos(fai2); double x = x2-x1; double y = y2-y1; double z = z2-z1; double angle = atan(z/sqrt(x*x + y*y)); if(angle<0) { angle *= -1; } if(angle>90) { angle = 180-angle; } angle = angle/PAI*180; return angle;}int main(){ double longitude1; char longitude1_flag; double latitude1; char latitude1_flag; double longitude2; char longitude2_flag; double latitude2; char latitude2_flag; cin>>longitude1>>longitude1_flag>>latitude1>>latitude1_flag>>longitude2>>longitude2_flag>>latitude2>>latitude2_flag; cout<<get_angle(longitude1, longitude1_flag, latitude1, latitude1_flag, longitude2, longitude2_flag, latitude2, latitude2_flag)<<endl; return 0;}