Обнаружение столкновений неправильной формы

Я знаю, как проверить, собирается ли круг столкнуться с квадратом, и я знаю, как определить, собирается ли квадрат столкнуться с квадратом, но как бы я узнал, собирается ли полигон столкнуться с квадратом?

Или еще лучше, когда многоугольник вот-вот столкнется с полигоном.

Или еще лучше, когда форма, состоящая из линий, которые не являются прямыми, сталкивается с другой подобной формой, многоугольник или круг/прямоугольник

Есть ли какой-нибудь способ получить пиксели, которые могли бы занимать фигуры, и пиксели будут иметь форму другой формы и проверить, одинаковы ли они из них?

Я надеюсь, что есть какое-то решение, которое не требует тонны вычисления конкретной формы.

Я использую javascript и html5 canvas для этого.

Ответ 1

Это не простой материал. Если вы удовлетворены тем, что функция может определить, сталкиваются ли два полигона (и вы можете их откат), тогда решение не так сложно. Вам просто нужно проверить, пересекаются ли какие-либо две стороны полигона друг с другом или нет. Это можно сделать с помощью некоторой математики, и с большими формами или многоугольниками она может съесть производительность. Чтобы решить эту проблему, вы можете использовать разделение пространства и ограничивающие объемы.

UPDATE: Вы можете рассчитать пересечение строк на основе this. Затем вам нужно проверить, находится ли эта точка в обоих сегментах или нет. Для этого вы можете использовать конечные точки сегментов, а переменные ua и ub будут находиться между 0-1, если сегмент фактически содержит точку.

Ответ 2

Простейшим является использование ограничивающего прямоугольника, просто найдите минимальные и максимальные значения объекта и сделайте из него поле. Чтобы сделать многоугольник для многоугольника, вам нужен способ хранения краев многоугольника и другой метод для определения того, какие точки или ребра столкнулись с другим объектом. Отсюда вы можете определить, как реагировать на столкновение.

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