UVA 11646 - Athletics Track || UVA 11817 - Tunnelling the Earth 几何

2014-11-24 08:50:48 · 作者: · 浏览: 0

题目大意:

两题几何水题。

1.UVA 11646 - Athletics Track

如图,体育场的跑道一圈400米,其中弯道是两段半径相同的圆弧,已知矩形的长宽比例为a:b,求长和宽的具体数值。


Text Box:                               Geometric Model

2.UVA 11817 - Tunnelling the Earth

给出地球上起点和终点(均用度数的经纬度表示),从起点出发,可以沿着球面最短路径走。也可以钻隧道,走直线。求这两种方法的路程差。


题解:

1、UVA 11646 - Athletics Track

http://uva.onlinejudge.org/index.php option=com_onlinejudge&Itemid=8&page=show_problem&problem=2693

直接推到一下公式,我是画个对角线,求个角度。。。。挺简单的。

#include
  
   
#include
   
     #include
    
      using namespace std; int main() { double a,b; int kase=1; char temp[5]; while(~scanf("%lf%s%lf",&a,temp,&b)) { double g=atan2(b,a); double r=b/2/sin(g); double k=400/(2*a+4*g*r); printf("Case %d: ",kase++); printf("%.10lf %.10lf\n",k*a,k*b); } return 0; }
    
   
  


2.UVA 11817 - Tunnelling the Earth

http://uva.onlinejudge.org/index.php option=com_onlinejudge&Itemid=8&page=show_problem&problem=2917

题目给出的是度数,要先化成弧度。

然后,求出坐标即可。

吐槽:百度了下经纬度。。。。然后已知经纬度求坐标好像高数里面的三重积分的球面坐标- -|||

#include
  
   
#include
   
     #include
    
      using namespace std; const double r=6371009; const double pi=acos(-1.0); int main() { int T; scanf("%d",&T); while(T--) { double a,b; double x1,y1,z1,x2,y2,z2; scanf("%lf%lf",&a,&b); a=a*pi/180; b=b*pi/180;//把经度纬度换算成弧度 x1=r*cos(a)*cos(b); y1=r*cos(a)*sin(b); z1=r*sin(a); scanf("%lf%lf",&a,&b); a=a*pi/180; b=b*pi/180; x2=r*cos(a)*cos(b); y2=r*cos(a)*sin(b); z2=r*sin(a); double len1=sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) +(z1-z2)*(z1-z2)); double angle=2*asin(len1/2/r); double len2=angle*r; printf("%.0lf\n",len2-len1); } return 0; }