zzuli 2127 tmk射气球

题目:tmk射气球

 

题解:高中数学题。。空间中点到线段的距离。。

  作为大学狗已经基本上忘得差不多了。。给我看的一脸懵逼

 

代码:

 1 #include <iostream>
 2 #include <cmath>
 3 #include <cstdio>
 4 using namespace std;
 5 
 6 int t,tt,t1;
 7 
 8 double h,x1,y11,x2,y2,x,y,z,xx,yy,zz,x0,y00,z0,mid,x3,y3,pa,pb,pq,z3;
 9 
10 int main()
11 {
12     cin>>t;
13     while(t--)
14     {
15         cin>>h>>x1>>y11>>x2>>y2;
16         cin>>x>>y>>z>>xx>>yy>>zz;
17 
18 
19 
20         cin>>t1;
21         while(t1--)
22         {
23             cin>>tt;
24 
25             //当前气球的坐标
26             x0=x+tt*xx;
27             y00=y+tt*yy;
28             z0=z+tt*zz;
29 
30             if(x1==x2&&y11==y2)//如果把气艇看作一个点的话
31             {
32                 pq=sqrt((x1-x0)*(x1-x0)+(y2-y00)*(y2-y00)+(h-z0)*(h-z0));
33                 printf("%.2f\n",pq);
34                 continue;
35             }else{
36                 //参数mid
37                 mid=((x1-x0)*(x1-x2)+(y11-y00)*(y11-y2))/((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2));
38 
39 
40                 //点到直线的垂足坐标
41                 x3=x1+mid*(x2-x1);
42                 y3=y11+mid*(y2-y11);
43                 z3=h;
44 
45                 //三种不同情况的最短距离
46                 pq=sqrt((x3-x0)*(x3-x0)+(y3-y00)*(y3-y00)+(z3-z0)*(z3-z0));
47                 pa=sqrt((x1-x0)*(x1-x0)+(y11-y00)*(y11-y00)+(z3-z0)*(z3-z0));
48                 pb=sqrt((x2-x0)*(x2-x0)+(y2-y00)*(y2-y00)+(z3-z0)*(z3-z0));
49 
50                 if(mid>=0&&mid<=1) printf("%.2f\n",pq);
51                 else if(mid<0) printf("%.2f\n",pa);
52                 else if(mid>1) printf("%.2f\n",pb);
53             }
54         }
55     }
56 
57     return 0;
58 }

 

posted on 2017-04-17 18:38  RocSAMA  阅读(162)  评论(0)    收藏  举报