hdu2436 判断 球与长方体相交

来源:互联网 发布:美国域名 编辑:程序博客网 时间:2024/06/06 02:16


//hdu2436  判断球与长方体(与坐标轴平行)是否相交,之前没看清题目,就把长方体和球三维旋转了。。。。

//思路是找长方体与球的最近距离,再和半相比。
//后来没有用64位wa的找不着北了。。。。

 

 

 

//ac代码如下:#include<iostream>#include<cstdio>#include<math.h>using namespace std;#define eps 1e-8const __int64 inf= 10000000;struct po__int643{__int64 x,y,z;}p[10],cen;__int64 r;__int64 max(__int64 a,__int64 b){return a>b? a:b;}__int64 min(__int64 a,__int64 b){return a<b? a:b;}__int64 main(){__int64 cas;scanf("%I64d",&cas);while(cas--){__int64 i;__int64 x,y,z;scanf("%I64d%I64d%I64d",&x,&y,&z);__int64 minx=x,maxx=x,miny=y,maxy=y,minz=z,maxz=z;//__int64 dis=inf;for(i=1;i<8;i++){scanf("%I64d%I64d%I64d",&x,&y,&z);minx=min(minx,x);miny=min(miny,y);minz=min(minz,z);maxx=max(maxx,x);maxy=max(maxy,y);maxz=max(maxz,z);}scanf("%I64d%I64d%I64d%I64d",&cen.x,&cen.y,&cen.z,&r);__int64xx=cen.x,yy=cen.y,zz=cen.z;if(xx>maxx)xx=maxx;if(xx<minx)xx=minx;if(yy>maxy)yy=maxy;if(yy<miny)yy=miny;if(zz>maxz)zz=maxz;if(zz<minz)zz=minz;if(r*r>=((xx-cen.x)*(xx-cen.x)+(yy-cen.y)*(yy-cen.y)+(zz-cen.z)*(zz-cen.z)))printf("Yes\n");else printf("No\n");}return 0;}