Как сформировать вогнутые фигуры из выпуклых кусочков - PullRequest
0 голосов
/ 14 июля 2011

Эй, мне сказали в предыдущем ответе, что для создания вогнутых фигур из нескольких выпуклых я делаю следующее:

Если у вас нет выпуклой оболочки, выполните алгоритм упаковки пакета чтобы получить выпуклую границу, которая охватывает все ваши точки (опять же довольно быстро). en.wikipedia.org/wiki/Gift_wrapping_algorithm

Выберите точку, которая находится на границе, в качестве начальной точки для алгоритма.


Теперь проходим через следующие точки, которые находятся на вашей фигуре, но не на выпуклой границе. Когда он найден, создайте новую фигуру с вершинами из стартовая точка для найденной неграничной точки. Наконец, установите начальную точку как найденную точку за пределами границы

Рекурсия теперь ваш друг: делайте точно такой же процесс на каждом новом под-форму вы делаете.


Я запутался в одном, хотя. Что вы делаете, когда две вершины подряд находятся вне границы? Достигнув первой, вы подключаете к ней начальную точку, но затем сразу же начинаете повторять итерирование в другую внешнюю точку, оставляя вам только 2 вершины для работы: начальная точка и новая внешняя точка. Чего мне не хватает?

Чтобы проиллюстрировать мою проблему, вот форма, относящаяся к этой проблеме: Было бы здорово, если бы кто-то мог нарисовать все это и пройтись по шагам алгоритма, используя это. И используя точку 1 в качестве отправная точка.

enter image description here

Спасибо!

1 Ответ

0 голосов
/ 14 июля 2011

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

Эта проблема обсуждалась в связи с программным обеспечением CGAL для вычислительной геометрии здесь, в Stackoverflow, C ++ 2D библиотека тесселяции .

...