Как определить пересекаются ли OBB и OBB?

Как определить пересекаются ли OBB и OBB?

Alex Silaev

Для того, чтобы ответить на этот вопрос, давайте подумаем как эту задачу решить для 2D, то есть у нас есть rect + поворот. И вот для 2д у нас появляется много вариантов, но нам нужен такой, который затем подойдет и для 3D.

Давайте рассмотрим каждый Rect отдельно относительно его координатной сетки:

Как мы понимаем, что они не пересекаются? Правильно, между ними есть свободное пространство. Осталось его найти.

Давайте опустим линии из крайних точек каждой из фигур на оси:

Мы без труда можем теперь сравнить координаты по x и y, чтобы найти пересечение между ними. Что же мы ищем? Мы ищем отсутствие наложения по любой из сторон. Если наложения нет - значит наши фигуры не пересекаются.

Но в нашем примере получается так, что фигуры пересекаются по обоим координатам. Все верно, потому что мы посчитали на сетке относительно голубого прямоугольника. Давайте теперь сделаем то же самое относительно красного:

И вот тут мы видим, что по координате X пересечения нет, что мы можем без труда определить. Значит фигуры не пересекаются.

Самое главное, что этот алгоритм будет работать для 3D точно так же, только добавится еще одна ось Z, для которой нужно будет проверить наложение фигур.


https://t.me/unsafecsharp


Report Page