地球的平均半径为6371千米,已知地球上两个城市A、B的经度和纬度,编程序求出这两个城市之间的地面距离
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 16:27:29
地球的平均半径为6371千米,已知地球上两个城市A、B的经度和纬度,编程序求出这两个城市之间的地面距离
地球的平均半径为6371千米,已知地球上两个城市A、B的经度和纬度,编程序求出这两个城市之间的地面距离
地球的平均半径为6371千米,已知地球上两个城市A、B的经度和纬度,编程序求出这两个城市之间的地面距离
求出经纬度差,根据cosθ=cosθ1cosθ2求出两城到球心的角的弧度θ,再根据L = θ * R可求球面距离.
编程如下,仅是给个思路,考虑不周之处楼主请自行完善.
#include
#include
#include
using namespace std;
const double R = 6371.0;
const double PI = 3.141592653;
struct Coordinate
{
\x09string X;//经度
\x09string Y;//纬度
};
double GetTheta(Coordinate& A,Coordinate& B)
{
\x09int la,lb;
\x09double a,b,dx,dy;
\x09char cha,chb;
\x09string ax,ay,bx,by;
\x09ax = A.X;
\x09ay = A.Y;
\x09bx = B.X;
\x09by = B.Y;
\x09la = ax.length();
\x09lb = bx.length();
\x09cha = ax[la-1]; ax[la-1] = 0;
\x09chb = bx[lb-1]; bx[lb-1] = 0;
\x09sscanf(ax.data(),"%lf",&a);
\x09sscanf(bx.data(),"%lf",&b);
\x09if(cha == chb)
\x09\x09dx = abs(a-b);
\x09else
\x09{
\x09\x09dx = abs(a+b);
\x09\x09if(dx > 180) dx = 360 - dx;
\x09}
\x09la = ay.length();
\x09lb = by.length();
\x09cha = ay[la-1]; ay[la-1] = 0;
\x09chb = by[lb-1]; by[lb-1] = 0;
\x09sscanf(ay.data(),"%lf",&a);
\x09sscanf(by.data(),"%lf",&b);
\x09if(cha == chb)
\x09\x09dy = abs(a-b);
\x09else
\x09\x09dy = abs(a+b);
\x09dx = dx * PI / 180;//角度转弧度
\x09dy = dy * PI / 180;
\x09return acos(cos(dx)*cos(dy)) ;
}
int main()
{
\x09double theta,dis;
\x09Coordinate A,B;
\x09A.X = "12.35E";
\x09A.Y = "23.05N";
\x09B.X = "30.25E";
\x09B.Y = "20.28S";
\x09theta = GetTheta(A,B);
\x09dis = theta * R;
\x09printf("%.2lfkm\n",dis);
\x09
\x09return 0;
}