http://acm.hdu.edu.cn/showproblem.php?pid=1174
分析: 点到直线距离 <= 土匪头的半径 就满足条件了。
(注意反方向情况不满足条件)
平行四边形面积/ 对角线长= 所求的距离
代码:
//hdu 1174
#include <iostream>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
int cntt;
double h1,r1,x1,y1,z1;
double h2,r2,x2,y2,z2,x3,y3,z3;
double ax,ay,az,bx,by,bz;
double s,t;
scanf("%d",&cntt);
while(cntt--){
scanf("%lf%lf%lf%lf%lf",&h1,&r1,&x1,&y1,&z1);
scanf("%lf%lf%lf%lf%lf",&h2,&r2,&x2,&y2,&z2);
scanf("%lf%lf%lf",&x3,&y3,&z3);
z1 +=(h1-r1);
z2 +=(h2*0.9-r2);
ax=(x1-x2); ay=(y1-y2); az=(z1-z2);
bx=(ay*z3-az*y3);
by=(az*x3-ax*z3);
bz=(ax*y3-ay*x3);
s= sqrt(bx*bx+by*by+bz*bz); //平行四边形面积
t= sqrt(x3*x3+y3*y3+z3*z3);
if(s/t <=r1 && ax*x3+ay*y3+ax*z3>0 ) printf("YES\n");
else printf("NO\n");
}
return 0;
}