建议:先实现同一个半球上的计算,正确运行之后再拓展到两个半球.

问题描述:

建议:先实现同一个半球上的计算,正确运行之后再拓展到两个半球.
已知地球的赤道半径为6378.137千米.假设在赤道上,有两个处于不同经度(单位为度)的城市,用C语言编程序求出这两点之间的直线距离(即弦长)与球面距离 (即劣弧的长度).
实验要求:
1.计算结果要有尽可能高的精确度.
2.要考虑到横跨东、西两个半球的情况.(提示:东经为正,西经为负.)
3.要求输入数据之间以空格分隔.例如,欲求赤道上东经10度到东经50度的距离,输入格式应为:10 50
4.最后提交完成的C语言源程序文件.
参考测试数据及结果:
东经0度,东经90度——直线距离9020.047727 ,球面距离10018.754000
东经20.5度,西经36.6度——直线距离6096.548421 ,球面距离6356.342816
东经160度,西经170度——直线距离3301.566601 ,球面距离3339.584667

#include
#include
const double R=6378.1370;
const double pi=3.141592654;
double chord_len(double a,double b);
double arc_len(double a,double b);
double chord_len(double a,double b)
{
double x,rad;
/*printf("%f,%f in chord_len\n",a,b);*/
rad=fabs(b-a);
if ( rad > 180) rad = 360-rad;
rad = rad*pi/180;
x=sqrt(2.0)*R*sqrt(1.0-cos(rad));
return x;
}
double arc_len(double a,double b)
{
double x,rad;
rad=fabs(b-a);
if ( rad > 180) rad = 360-rad;
x=R*rad*pi/180;
return x;
}
int main()
{
double a,b;
printf("请输入两个城市的经度(以空格隔开.东经为正,西经为负.):\n");
scanf("%lf %lf",&a,&b);
printf("%lf,%lf\n",a,b);
printf("两个城市的直线距离为:%f\n",chord_len(a,b));
printf("两个城市的球面距离为:%f\n",arc_len(a,b));
return 0;
}