题目大意:输入两个点的纬度跟经度,要求求出这两个点的直线距离跟从地球表面的距离的差值。
思路:利用高中的立体几何知识……
代码如下:
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cmath>
using namespace std;
const double pi=acos(-1);
int main(){
// freopen("data.txt","r",stdin);
ios::sync_with_stdio(false);
int T;
cin>>T;
double radius=6371009;
while(T--){
double x1,x2,y1,y2;
cin>>x1>>y1>>x2>>y2;
x1=x1/180*pi;
x2=x2/180*pi;
y1=y1/180*pi;
y2=y2/180*pi;
double r1=radius*sin(x1);
double r2=radius*sin(x2);
double BC=fabs(r1-r2);
r1=radius*cos(x1);
r2=radius*cos(x2);
double ac2=r1*r1+r2*r2-2*r1*r2*cos(y1-y2);
double AC=sqrt(ac2);
double ab2=BC*BC+ac2;
// cout<<ab2<<endl;
double AB=sqrt(ab2);
double arg=(radius*radius*2-ab2)/2/radius/radius;
// cout<<"zzzz"<<arg<<endl;
arg=acos(arg);
double c=radius*arg;
// cout<<arg<<' '<<c<<' '<<AB<<endl;
double ans=c-AB;
cout<<setiosflags(ios::fixed)<<setprecision(0)<<ans<<endl;
}
return 0;
}