HDU 1174 3维点到直线距离

来源:互联网 发布:淘宝的伞黑胶都在外面 编辑:程序博客网 时间:2024/06/08 17:51
若向量a=(a1,b1,c1),向量b=(a2,b2,c2), 
  则 
  向量a×向量b= 
  | i j k |
  |a1 b1 c1|
  |a2 b2 c2| 
  =(b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) 

  (i、j、k分别为空间中相互垂直的三条坐标轴的单位向量)。 


问题转化:空间点到直线的距离---即土匪的头心到子弹所在直线的距离是否小于头半径
点积: cos
叉积:sin

B到直线AC的距离就是|AB叉乘AC|/|AC| 
A警察头心   B匪徒头心   AC 与r同向


*/


struct  Point3D{        double x , y , z ;        Point3D(){}        Point3D(double _x , double _y , double _z):x(_x),y(_y),z(_z){}        Point3D operator ^ (Point3D o){                return Point3D(y*o.z-z*o.y ,                               x*o.z-z*o.x,                               x*o.y-y*o.x) ;        }        Point3D operator - (Point3D o){                return Point3D(x-o.x , y-o.y , z-o.z) ;        }        double mo(){               return sqrt(x*x + y*y + z*z) ;        }        void read(){              cin>>x>>y>>z ;        }};int  main(){     int i , t ;     Point3D A , B , AC ; //A人,B土匪     double h1 , r1 , h2 , r2 ;     cin>>t ;     while(t--){           cin>>h1>>r1 ;           B.read() ;           B.z += h1 - r1 ;           cin>>h2>>r2 ;           A.read() ;           A.z += h2*0.9 - r2 ;           AC.read() ;           Point3D p = (A - B) ^ AC ;           double r = p.mo() / AC.mo() ;           if(r + eps < r1) puts("YES") ;           else             puts("NO")  ;     }     return 0 ;}




0 0
原创粉丝点击