PKU 3407 Brookebond s'en va en guerre...
http://poj.org/problem?id=3407
地球上の2地点の緯度と経度が与えられる。
この時に、この2点間の地球表面での距離を求めろというような問題。
地球の中心に対する2点間の角度を求めて、半径をかける。
typedef struct{ double x,y,z; double norm(){ return sqrt(x*x+y*y+z*z); } }po; double operator*(const po&r,const po&l){ return r.x*l.x+r.y*l.y+r.z*l.z; } po getpo(){ int de,mi; char ch; double th,ph; cin>>de>>mi; cin>>ch; th=(de+mi/60.0)*M_PI/180.0; if(ch=='S')th=-th; cin>>de>>mi; cin>>ch; ph=(de+mi/60.0)*M_PI/180.0; if(ch=='E')ph=-ph; return (po){cos(th)*cos(ph),cos(th)*sin(ph),sin(th)}; } main(){ po p1=getpo(); po p2=getpo(); double ang=acos(p1*p2/p1.norm()/p2.norm()); printf("%.3f\n",6370*ang); }