hdu 1174

//三维点到直线的距离 点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|));
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值