# Collision Detection

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

#include<iostream> #include<algorithm> using namespace std; const int INF = 1 << 30; struct Point { int x, y, z; } P[8]; struct Ball { int x, y, z, r; } B; int maxx, maxy, maxz, minx, miny, minz; inline void rebuild() { maxx = maxy = maxz = -INF; minx = miny = minz = INF; for(int i = 0; i < 8; i++) { maxx = max(P[i].x, maxx); maxy = max(P[i].y, maxy); maxz = max(P[i].z, maxz); minx = min(P[i].x, minx); miny = min(P[i].y, miny); minz = min(P[i].z, minz); } } //intersect in every aspect inline bool judge() { long long dx = 0; long long dy = 0; long long dz = 0; long long R = (long long)B.r * B.r; if(maxx >= B.x && minx <= B.x) dx = 0; else dx = min((long long)(maxx - B.x) * (maxx - B.x), (long long)(minx - B.x) * (minx - B.x)); if(maxy >= B.y && miny <= B.y) dy = 0; else dy = min((long long)(maxy - B.y) * (maxy - B.y), (long long)(miny - B.y) * (miny - B.y)); if(maxz >= B.z && minz <= B.z) dz = 0; else dz = min((long long)(maxz - B.z) * (maxz - B.z), (long long)(minz - B.z) * (minz - B.z)); return dx + dy + dz <= R; } int main() { int T; cin>>T; while( T-- ) { for(int i = 0; i < 8; i++) cin>>P[i].x>>P[i].y>>P[i].z; cin>>B.x>>B.y>>B.z>>B.r; rebuild(); if(judge()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }

• 本文已收录于以下专栏：

## 【计算几何】 HDOJ 2436 Collision Detection

• blankcqk
• 2015年02月13日 19:50
• 434

## Unity-Rigidbody【刚体】组件-Collision Detection碰撞检测模式

Continous适用于将有可能会被高速移动物体撞上的物体。 Unity物体的Rigidbody组件提供了一个Collision Detection的属性，该属性用于更改物体的碰撞检测模式————一共...
• Ming991301630
• 2017年09月10日 15:32
• 279

## Real Time Collision Detection

2015-10-18      花了几天时间浏览了一遍，发现这本书真的是很不错的。 前一段时间看过的那本《游戏物理引擎开发》中只有一个Part 来将 collision detect...
• cloudqiu
• 2017年02月10日 14:00
• 306

## hdoj 2436 Collision Detection（数学型计算几何）

【题目大意】：判断一个长方体与一个球体是否接触 【解题思路】：接触的话也即存在一个点(x,y)成立：r*r>=(x-cx)*(x-cx)+(y-cy)*(y-cy)+(z-cz)*(z-cz...
• new_wu
• 2012年02月29日 01:02
• 515

## Pixel Perfect Collision Detection (Using Cocos2d-x)

// // CollisionDetection.h // Created by Mudit Jaju on 30/08/13. // // SINGLETON class for checki...
• z104207
• 2014年04月16日 18:21
• 1918

## ‘PitchMatrix3D’不是‘Matrix3D’的成员——linux下编译碰撞检测包ColDet

ColDet是一个非常著名的开源碰撞检测包。我下载之后，使用包中自带的makefile.g++编译它，出现了一些bug： g++ -c -O2 -DGCC coldet.cpp In file ...
• qtyl1988
• 2013年01月19日 14:23
• 1416

## hdu 5114 Collision

hdu 5114 Collision 题意:平面n*m的空间有两个点在（x1,y1）,(x2,y2) 向（1，1）运动，遇到边界反弹，最早在哪一点相遇。 分析  (1)答案只可能在...
• zz490396674
• 2014年11月30日 22:16
• 734

## collision detection

#pragma once #include "cocos2d.h" #include "Box2D/Box2D.h" class MyContact { public: MyCon...
• xiewenbo
• 2013年10月14日 20:54
• 452

## hdu4793Collision

2013年亚洲区域赛长沙站的几何题，就是告诉你两个圆（大圆和小圆），同心的，再告诉你一个小小圆在大圆外面，再告诉你小小圆的运动速度（矢量），如果碰到小圆就原路返回，如果碰不到就穿过大圆，问你小小圆在大...
• zh9406
• 2015年04月14日 10:46
• 439

## Collision Detection Tutorial

While Box2D handles all the collision detection and resolution of the physics, it would also be usef...
• guzicheng
• 2011年02月18日 11:02
• 866

举报原因： 您举报文章：HDU 2436 - Collision Detection 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)