Как найти ВСЕ точки, которые лежат на контуре выпуклой оболочки многоугольника (Matlab) - PullRequest
1 голос
/ 06 апреля 2011

извините, если этот вопрос может показаться простым, но я не мог понять его.

Представьте два произвольных прямоугольника, которые случайно перекрываются, так что их контуры пересекаются только в двух местах.Теперь вы вырезали область перекрытия из Прямоугольника 1.

Этот «укушенный прямоугольник 1» теперь имеет следующие точки (вершины): (1) Все точки прямоугольника 1, которые находятся за пределами прямоугольника 2, (2) Все точки прямоугольника 2, которые лежат внутри прямоугольника 1 и (3) двух точек пересечения.

Проблема состоит в следующем: как я могу получить порядок новых точек, чтобы функции строили график (...) или fill (...) нарисовал бы правильный "Укушенный прямоугольник 1"?

Что я сделал до сих пор: я определил выпуклую оболочку всех точек, лежащих вне прямоугольника 2 + пересечениеточки.Затем необходимо добавить новые точки, которые лежат внутри прямоугольника 1 (из-за совпадения с прямоугольником 2) между индексами первой и второй точек пересечения также в правильном порядке.

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

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

Надеюсь, кто-нибудь может мне помочь ... Заранее спасибо, Патрик

1 Ответ

0 голосов
/ 25 апреля 2011

В Matlab есть удивительная функция под названием polybool, которая позволяет вам выполнять любые операции над множествами: http://www.mathworks.com/help/toolbox/map/ref/polybool.html

Все, что вам нужно сделать, это определить четыре массива, описывающих прямоугольники (rect1x, rect1y, rect2x и rect2y) и вызвать [resultx resulty] = polybool('subtraction', rect1x, rect1y, rect2x, rect2y). Полученные массивы будут описывать «Укушенный прямоугольник 1».

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