HDU 2436
#include<iostream>
#include<cmath>
#define INF 100010
using namespace std;
struct PT
{
double x,y,z;
};
int main()
{
PT o,p;
double r;
int cas;
scanf("%d",&cas);
while(cas--)
{
double xmax=0,xmin=INF,ymax=0,ymin=INF,zmax=0,zmin=INF;
for(int i=0;i<8;i++)
{
scanf("%lf%lf%lf",&p.x,&p.y,&p.z);
xmax=max(xmax,p.x);
xmin=min(xmin,p.x);
ymax=max(ymax,p.y);
ymin=min(ymin,p.y);
zmax=max(zmax,p.z);
zmin=min(zmin,p.z);
}
scanf("%lf%lf%lf%lf",&o.x,&o.y,&o.z,&r);
double distx,disty,distz;
if(o.x<=xmax&&o.x>=xmin)
distx=0;
else distx=min(fabs(o.x-xmax),fabs(o.x-xmin));
if(o.y<=ymax&&o.y>=ymin)
disty=0;
else disty=min(fabs(o.y-ymax),fabs(o.y-ymin));
if(o.z<=zmax&&o.z>=zmin)
distz=0;
else distz=min(fabs(o.z-zmax),fabs(o.z-zmin));
if(distx*distx+disty*disty+distz*distz>r*r)
printf("No\n");
else printf("Yes\n");
}
return 0;
}
08年网络预选赛的题。
求球与立方体的距离是否大于球的半径。
先求出球心沿3个坐标轴与立方体所在平面的最近距离,平方求和,再判断是否大于半径的平方。