`
java-mans
  • 浏览: 11414046 次
文章分类
社区版块
存档分类
最新评论

hdu2436 判断 球与长方体相交

 
阅读更多


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

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

//ac代码如下:
#include<iostream>
#include<cstdio>
#include<math.h>

using namespace std;

#define eps 1e-8
const __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);

		__int64	xx=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;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics