zoukankan      html  css  js  c++  java
  • HDU 1174 爆头(计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1174

    解题报告:就是用到了三维向量的点积来求点到直线的距离,向量(x1,y1,z1)与(x2,y2,z2)的点积是:x1*x2+y1*y2+z1*z2.

    然后要注意的就是当两个向量的夹角大于等于90度时,无论如何都不能射中.

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 const double PI = acos(-1.0);
     8 struct Point
     9 {
    10     double x,y,z;
    11     Point(double a = 0,double b = 0,double c = 0) :x(a),y(b),z(c) {}
    12     friend Point operator + (Point a,Point b)
    13     {
    14         return Point(a.x+b.x,a.y+b.y,a.z+b.z);
    15     }
    16     friend Point operator - (Point a,Point b)
    17     {
    18         return Point(a.x-b.x,a.y-b.y,a.z-b.z);
    19     }
    20 };
    21 double length(Point a)
    22 {
    23     return sqrt(a.x*a.x+a.y*a.y+a.z*a.z);
    24 }
    25 int main()
    26 {
    27  //   freopen("in","r",stdin);
    28     int T;
    29     double h1,r1,h2,r2;
    30     Point p1,p2,p;
    31     scanf("%d",&T);
    32     while(T--)
    33     {
    34         scanf("%lf%lf%lf%lf%lf",&h1,&r1,&p1.x,&p1.y,&p1.z);
    35         scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&h2,&r2,&p2.x,&p2.y,&p2.z,&p.x,&p.y,&p.z);
    36         Point  o1 = p2,o2 = p1;
    37         o2.z += (h1 - r1);
    38         o1.z += (0.9 * h2 - r2);
    39         Point oo = o2 - o1;
    40         double temp = (oo.x*p.x + oo.y * p.y + oo.z * p.z) / length(oo) / length(p);
    41         double angle = acos(temp);    //求夹角
    42         if(angle <= 0)
    43         {
    44             puts("NO");
    45             continue;
    46         }
    47         double D = sin(angle) * length(oo);
    48         printf(D <= r1? "YES
    ":"NO
    ");
    49     }
    50     return 0;
    51 }
    View Code
  • 相关阅读:
    导入动态页面的两种方法
    JSTL之c:set
    CentOS更新源
    MVC轻量web应用
    Linux设备驱动开发流程(转)
    g++: internal compiler error: Killed (program cc1plus)Please submit a full bug report,内存不足问题解决
    .PHONY的作用
    CMake(转)
    关于a+++++b含义的问题
    返回值为函数指针的函数(转)
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/4092315.html
Copyright © 2011-2022 走看看