//三维点到直线的距离 点B到直线AC的距离 就是 |AB X AC|/|AC| ‘X’是叉乘 ,‘ ||‘表示模
#include<stdio.h>
#include<math.h>
int main()
{
int t;
double h1,r1,x1,y1,z1,h2,r2,x2,y2,z2,x3,y3,z3,a,b,c,x,y,z,m,n;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf%lf%lf",&h1,&r1,&x1,&y1,&z1);
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&h2,&r2,&x2,&y2,&z2,&x3,&y3,&z3);
z1=h1+z1-r1;
z2=h2*0.9+z2-r2;
a=x1-x2;
b=y1-y2;
c=z1-z2;//向量ab
x=b*z3-c*y3;
y=c*x3-a*z3;
z=a*y3-b*x3;
m=sqrt(x*x+y*y+z*z);//叉积ab*ac
n=m/sqrt(x3*x3+y3*y3+z3*z3);//b到直线ac的距离就是|ab叉乘ac|/|ac|
if(n<=r1&&(a*x3+b*y3+c*z3)>0)//ab点积ac>0,判断方向
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
/*三维向量A,B的叉积是怎么算的
比方说A=(a1,a2,a3),B=(b1,b2,b3)那么AXB就是[i,j,k;a1,a2,a3;b1,b2,b3]这个矩阵的行列式的值,
经过计算就应该是A×B=(a2b3-a3b2)*i+(a3b1-a1b3)*j+(a1b2-a2b1)*k;
向量的点积:
P=(x1,y1),Q=(x2,y2);
P点积Q=x1*x2+y1*y2;
向量的夹角等于arccos(a点积b/(|a||b|));
*/
hdu 1174
最新推荐文章于 2020-12-20 12:55:42 发布