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 }
浙公网安备 33010602011771号