как вычесть круг из произвольного многоугольника - PullRequest
3 голосов
/ 13 мая 2010

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

Я не уверен, с чего начать.

Пример http://www.freeimagehosting.net/uploads/89a0276d9d.jpg

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

Предупреждение: получить код, чтобы сделать это абсолютно правильно, сложно. (Концептуально это хорошо, но вы можете быстро увязнуть в числовых ошибках и крайних случаях.) Вы в основном просите 2D версию Конструктивная сплошная геометрия . Возможно, вы захотите посмотреть, можете ли вы использовать существующую библиотеку, написанную экспертом в области вычислительной геометрии. Есть несколько библиотек здесь , которые, вероятно, будут делать то, что вы хотите, но вам придется выбрать представление, которое подходит вам лучше всего, и преобразовать то, что у вас есть, в это представление.

0 голосов
/ 06 июня 2010

Вот бесплатная библиотека отсечения полигонов (написана на Delphi и C ++), которая делает то, что вы просите: http://sourceforge.net/projects/polyclipping/

...