Каков наилучший способ обнаружения столкновений? - PullRequest
1 голос
/ 25 февраля 2012

Мне нужно определить многоугольник, который будет «законной» областью, и позволить пользователю перемещать прямоугольник внутри этого многоугольника, не давая им перемещать прямоугольник в любом месте, где его точки выходят за пределы многоугольника.

Многоугольник имеет фиксированную форму, поэтому я подумал, что проще всего импортировать PNG этой формы и как-то вытягивать точки таким образом? Но я все еще в растерянности относительно математики, связанной с проверкой координат прямоугольника, когда пользователь перетаскивает его, и проверкой того, в какую точку они переместили фигуру к краю ограничивающего многоугольника.

К сожалению, ограничивающий многоугольник имеет довольно сложную форму. Я надеюсь, что кто-то может указать мне на учебник, который показывает, как лучше всего выполнить такое обнаружение столкновений.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2012

Отличное руководство по обнаружению столкновений Metanet содержит хороший раздел о том, как выполнять плавное столкновение с выровненными по оси ограничительными рамками (AABB) и произвольными "стенами".

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

1 голос
/ 25 февраля 2012

Если вы хотите проверить только углы прямоугольника, вы можете выполнить «внутренний» тест для каждого из них.http://en.wikipedia.org/wiki/Point_in_polygon

И если вы также хотите убедиться, что никакая заостренная часть многоугольника не «пробивает» ваш прямоугольник, вы можете выполнить тест для каждой из 4 линий в прямоугольнике по всем линиям в многоугольникечтобы увидеть, если они пересекаются.http://en.wikipedia.org/wiki/Line-line_intersection

...