Форум программистов, компьютерный форум, киберфорум
Наши страницы
Алгоритмы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
1

узнать, есть ли пересечение кубов

19.12.2012, 23:56. Просмотров 1413. Ответов 4
Метки нет (Все метки)

Всем доброго вечера!
Нужен алгоритм для определения, есть ли у двух кубов пересечение (любое, даже касание).
Кубы разных размеров, известны их координаты. И еще. ребра куба находятся под углом 90 градусов до координатных осей (или прямых, паралельным им). Надеюсь, понятно объяснил
Что скажете?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2012, 23:56
Ответы с готовыми решениями:

Узнать есть ли в массиве 2 одинаковых числа за N*log(N) в худшем случае
Сижу, думаю в сторону сортировки слиянием или пирамидальной сортировки. ...

Есть последовательность X1, ., X50. Узнать, есть ли среди них нулевые элементы, и если есть, то сколько
Есть последовательность X1, ..., X50. Узнать, есть ли среди них нулевые...

Как узнать есть ли фронтальная камера на устройстве и если есть, то использовать ее?
Собственно вопрос выше.

Узнать есть ли символы, если есть, то, иначе это. Классика.
Кто создал подфорум +10 И так, нужна консультация. У меня есть...

Узнать, есть ли в матрице строки, сумма элементов которых есть отрицательное число
составьте программу, выясняющую есть ли в двумерном массиве A(N,M) строки,...

4
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
20.12.2012, 12:22 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inline bool Inters( float min1, float max1, float min2, float max2 )
{
 if (min1 > max2) return false;
 if (max1 < min2) return false;
 return true;
}
 
bool CubeInters( const float cube0[6], const float cube1[6] )
{
 for (int i = 0; i < 3; ++i)  
  if (!Inters(cube0[i], cube0[i + 3], cube1[i], cube1[i + 3]))
   return false;   
 
 return true;
}
2
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
20.12.2012, 21:42  [ТС] 3
Код выглядит красиво, только объясните, что такое
C++
1
float cube0[6]
Сегодня так поразмыслил. Пришел к выводу, что при даных условиях кубы пересекаются, только если хотя бы одна вершина одного из них находится внутри другого. То-есть можно просто пройтись по всех вершинах одного куба, но, может быть, есть более ефективное решение?
0
Igor3D
1227 / 594 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
21.12.2012, 14:09 4
Цитата Сообщение от DrHlus Посмотреть сообщение
Код выглядит красиво, только объясните, что такое
C++
1
float cube0[6]
Это называется "bounding box"
cube0[0] = min X (первого куба)
cube0[1] = min Y
cube0[2] = min Z
cube0[3] = max X
cube0[4] = max Y
cube0[5] = max Z

Цитата Сообщение от DrHlus Посмотреть сообщение
Сегодня так поразмыслил. Пришел к выводу, что при даных условиях кубы пересекаются, только если хотя бы одна вершина одного из них находится внутри другого.
В общем случае куб может пересекаться и при этом не иметь ни одной вершины внутри другого. Пример: 2 длинных бруска, один вытянут по одной оси, другой по другой
1
DrHlus
0 / 0 / 0
Регистрация: 05.12.2012
Сообщений: 11
22.12.2012, 14:43  [ТС] 5
Очень хороший алгоритм! Спасибо большое!
0
22.12.2012, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2012, 14:43

Узнать, есть ли в Dictionary искомый ключ, если есть, то вернуть ссылку на экземпляр ключа
Здравствуйте, у меня есть Dictionary: Dictionary&lt;Keys, List&lt;string&gt;&gt; Mass =...

Программно узнать какие есть в определённой папке файлы и если есть лишние удалить их
Доброго времени суток! Помогите пожалуйста нубу реализовать то что напишу ниже...

Найдите трехзначные числа, равные сумме кубов своих цифр. Подсчет суммы кубов организовать в виде функции
Найдите трехзначные числа, равные сумме кубов своих цифр. Подсчет суммы кубов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru