Как рассчитать разницу Минковского между двумя AABBs (без векторной математики)?
Я ввожу вторая версия моей библиотеки обнаружение столкновений. Этой конкретной библиотеки должны заниматься выровненный по осям коробки (AABBs). Я хотел бы начать отслеживать быстро движущиеся коробки в этой версии. Я думаю, что вычисление разницы Минковского между ними было бы хорошей отправной точкой для этого.
когда я говорю разницу Минковского, я имею в виду геометрическую операцию, описанную в обнаружение столкновений для чайников.
в catch is: процесс и алгоритм, описанные там, очень общие. Он использует довольно продвинутую векторную математику для вычисления MD любых двух полигонов.
в моем случае у меня есть AABBs. Учитывая их численную простоту, библиотека до сих пор не нуждалась в векторной концепции - например, мне не нужно было вычислять один точечный продукт. Я бы хотел, чтобы так и оставалось, если это вообще возможно.
Итак, мой вопрос:
учитывая два AABBs по их верхней, левой, ширине и высота ({t1,l1,w1,h1}
и {t2,l2,w2,h2}
), Как вычислить их MD (без получения векторной математики, если это возможно)?
просто играя с виджетом по обнаружению столкновений для чайников, я почти уверен, что ширина MD будет коробкой ширины w1+w2
и высотой h1+h2
. Но я понятия не имею, как вычислить его верхний или левый угол.
1 ответов
разница Минковского для двух выровненных по осям прямоугольников {t1, l1, w1, h1} и {t2, l2, w2, h2} сама по себе является выровненным по осям прямоугольником:
l = l1 - l2 - w2
t = t2 - t1 - h1
w = w1 + w2
h = h1 + h2
ниже приведена краткая демонстрация javascript, чтобы показать это в действии. Можно перетащить любой из двух прямоугольников. Они будут менять цвет при перекрытии