2D тест на пересечение ограничивающей рамки


9

У меня есть два ограничивающих прямоугольника, выровненных по объектам (т.е. не по оси, они вращаются вместе с объектом). Я хотел бы знать, перекрываются ли два выравнивания объекта. ( Правка: примечание - я использую тест ограничивающего прямоугольника с осями, чтобы быстро отбросить удаленные объекты, поэтому не имеет значения, если подпрограмма с квадратом немного медленнее. )

Мои ящики хранятся в виде четырех точек x, y. Я искал ответы, но не могу понять имена переменных и алгоритмы в примерах, чтобы применить их к моему конкретному случаю.

Может ли кто-нибудь помочь показать мне, как это будет сделано, ясным и простым способом? Спасибо. (Конкретный язык не важен, псевдокод в стиле C в порядке.)

Ответы:


5

Если вы знаете, где искать, это легко. Вы ищете OOBB. Перейдите сюда: http://www.realtimerendering.com/intersections.html .
Там вы найдете ссылку на этот сайт http://www.geometrictools.com/LibMatmatics/Intersection/Intersection.html
и там найдете правильный код. (Ctrl + F "Пересечение ящиков (2D)")

Он использует SAT и содержит исходники и статью.


Алгоритм, описанный геометрическими инструментами, - тот, на который я бы указал.
Яри ​​Комппа

Я понимаю, что это было 4 года назад, но я всегда объясняю отрицательное мнение и все такое. Это довольно "Ваш ответ в другом замке", и теперь, похоже, ответа нет даже во втором случае.
Ян

2

Более простой способ, вероятно, состоит в том, чтобы проверить каждую вершину блока B на каждой стороне блока A (вычислить расстояние со знаком). Таким образом, вы можете классифицировать каждую вершину как «перед» или «позади» сегмента.

Если все вершины B классифицируются как «перед» одного из сегментов A, B и A не перекрываются; в противном случае они делают.

Это несколько усложняется, поэтому вы можете получить некоторое повышение производительности, выполнив сначала проверку окружности, используя ограничивающие круги квадратов (тривиально для вычисления)


Сначала я делаю тест с ограничивающими осями с выравниванием по оси, чтобы быстро отбросить удаленные объекты ... У вас есть еще какие-нибудь подробности о тесте с квадраторами?
AshleysBrain

временно поверните оба четырехугольника одним и тем же преобразованием так, чтобы один из них оказался на одной оси, а затем используйте тест SAT, как указано выше. когда результат найден, поверните его обратно, чтобы вернуть их обратно.
Стив Х
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.