zoukankan      html  css  js  c++  java
  • hdoj 2436 Collision Detection

    Collision Detection

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1207    Accepted Submission(s): 367


    Problem Description
          In physical simulations, video games and computational geometry, collision detection involves algorithms for checking for collision, i.e. intersection, of two given objects. Collision detection algorithms are a basic component of 3D video games. Without them, characters could go through walls and other obstacles.
          Here comes an interesting problem, given a ball and a cuboid, you need to detect whether they collide. We say that two objects collide if and only if they share at least one point.
     
    Input
          The first line of input is the number of test cases.
          Each test case contains two lines, the first line contains 24 integers X1, Y1, Z1, …, X8, Y8, Z8, representing the 8 vertexes of the cuboid. Vertexes are given in random order and you can make sure that all edges of the cuboid are parallel to coordinate axes; the second line contains 4 integers X,Y,Z,R representing the central point of the ball and its radius. All integers given are non-negative and will be less than 100000.
     
    Output
          For each case output "Yes" Or "No" on a single line.
     
    Sample Input
    2 0 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 2 2 2 2 0 0 0 0 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 2 2 2 1
     
    Sample Output
    Yes No
     
    Source
     
    Recommend
    lcy   |   We have carefully selected several similar problems for you:  2437 2429 2433 2435 2428 
     
     
    真是日了狗了。。。
    读错题wa到死。。。
    英文差的原因?
    我以为长方体是空心的。。
    然后球是有可能在内部
    我说我怎么写的那么麻烦,又是判断点,又是判断边,又是判断面。。。。
     
    然后全推了重写。。。
    又WA到死。。。
    最后发现又是强制转化类型的问题。。。
    如果变量是int 类型,即使一出赋值给long long ,在赋值之前的计算也会溢出。。。
    所以不溢出的办法就是之前的int 就写成 long long 类型的。。。
     1 /*************************************************************************
     2     > File Name: code/2015summer/#6/II.cpp
     3     > Author: 111qqz
     4     > Email: rkz2013@126.com 
     5     > Created Time: 2015年08月01日 星期六 03时09分18秒
     6  ************************************************************************/
     7 
     8 #include<iostream>
     9 #include<iomanip>
    10 #include<cstdio>
    11 #include<algorithm>
    12 #include<cmath>
    13 #include<cstring>
    14 #include<string>
    15 #include<map>
    16 #include<set>
    17 #include<queue>
    18 #include<vector>
    19 #include<stack>
    20 #define y0 abc111qqz
    21 #define y1 hust111qqz
    22 #define yn hez111qqz
    23 #define j1 cute111qqz
    24 #define tm crazy111qqz
    25 #define lr dying111qqz
    26 using namespace std;
    27 #define REP(i, n) for (int i=0;i<int(n);++i)  
    28 typedef long long LL;
    29 typedef unsigned long long ULL;
    30 const int inf = 0x7fffffff;
    31 
    32 
    33 LL dis(LL x1,LL x2,LL y1,LL y2,LL z1,LL z2)
    34 {
    35     
    36     return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2);
    37     
    38 }
    39 int main()
    40 {
    41     int T;                 //整体算法是寻找距离球最近的点,比较这个点到球心的距离和半径
    42                 // 。。。判断了边+点+面还没A的我好傻逼啊。。。。。。。。sad
    43                 // 卧槽,读错题了,长方体是实心的啊喂!怪不得我想的那么麻烦!
    44     cin>>T;
    45     while (T--)
    46     {
    47     LL tx,ty,tz;
    48     LL x1 = inf;
    49     LL x2 = -inf;
    50     LL y1 = inf;
    51     LL y2 = -inf;
    52     LL z1 = inf;
    53     LL z2 = -inf;
    54     for ( int i = 1 ; i <= 8 ; i++ )
    55     {
    56 
    57         scanf("%lld %lld %lld",&tx,&ty,&tz);
    58         x1 = min(tx,x1);
    59         x2 = max(tx,x2);
    60         y1 = min(ty,y1);
    61         y2 = max(ty,y2);
    62         z1 = min(tz,z1);
    63         z2 = max(tz,z2);
    64     }
    65     LL bx,by,bz,r;
    66         LL x,y,z;
    67     scanf("%lld %lld %lld %lld",&bx,&by,&bz,&r);
    68     x = bx;
    69     y = by;
    70     z = bz;
    71     if (x>x2) x=x2;
    72     if (x<x1) x=x1;
    73     if (y>y2) y=y2;
    74     if (y<y1) y=y1;
    75     if (z>z2) z=z2;
    76     if (z<z1) z=z1;
    77     if (r*r>=dis(x,bx,y,by,z,bz))
    78     {
    79         puts("Yes");
    80     }
    81     else
    82     {
    83         puts("No");
    84     }
    85 
    86 
    87     }
    88   
    89     return 0;
    90 }
     
  • 相关阅读:
    Spring学习笔记02-配置bean(第七周)
    Spring学习笔记01
    构建之法阅读笔记02
    keep running-团队视频分析初步总结
    影视分享App(三)(第六周)
    Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
    Delphi 正则表达式语法(5): 边界
    Delphi 正则表达式语法(4): 常用转义字符与 .
    Delphi 正则表达式语法(3): 匹配范围
    Delphi 正则表达式语法(2): 或者与重复
  • 原文地址:https://www.cnblogs.com/111qqz/p/4693545.html
Copyright © 2011-2022 走看看