HDU 1174 爆头

来源:互联网 发布:ubuntu系统分区教程 编辑:程序博客网 时间:2024/05/07 10:36

已知射线和一个定点,只要求定点到线的距离就可以

由于给出的线是向量和射线的一个端点,用叉乘求解,具体就是数学公式了。

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int t;    double h1,r1,x1,y1,z1;    double h2,r2,x2,y2,z2,x3,y3,z3;    double hp,ht,lenpt,a,b,c,ax,bx,cx;    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);        ht=z1+h1-r1;        hp=z2+0.9*h2-r2;        a=x1-x2,b=y1-y2,c=ht-hp;        ax=b*z3-c*y3,bx=a*z3-c*x3,cx=a*y3-b*x3;        double len=(ax*ax+bx*bx+cx*cx)/(x3*x3+y3*y3+z3*z3);        if(len<=r1*r1&&(a*x3+b*y3+c*z3>0))        printf("YES\n");        else        printf("NO\n");    }    return 0 ;}


1 0