给出经纬度求球面坐标的模板题。
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const double R=6371009.0;
double torad(double deg)
{
return deg/180*acos(-1.0);
}
int main()
{
freopen("in.txt","r",stdin);
double a1,b1,a2,b2;
double x1,x2,y1,y2,z1,z2;
int T;
cin>>T;
while(T--)
{
cin>>a1>>b1>>a2>>b2;
a1=torad(a1);
b1=torad(b1);
x1=R*cos(a1)*cos(b1);
y1=R*cos(a1)*sin(b1);
z1=R*sin(a1);
a2=torad(a2);
b2=torad(b2);
x2=R*cos(a2)*cos(b2);
y2=R*cos(a2)*sin(b2);
z2=R*sin(a2);
double dx=x1-x2,dy=y1-y2,dz=z1-z2;
double l1=sqrt(dx*dx+dy*dy+dz*dz);
double l2=acos(1-l1*l1/2/R/R)*R;
printf("%.0f\n",l2-l1);
}
return 0;
}