Показать сообщение отдельно
Старый 24.02.2009, 16:16   #5
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Булевые операции с многоугольниками

Спасибо, примерно так я уже и решил проблему.

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

После чего находим все пересечения граней. И вновь созданные точки помещаем в порядки обхода вершин всех многоугольников причастных к её появлению (чаще всего их 2).

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

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

Делая обход пройденные вершины добавляем в новым многоугольник,который и будет результатом СЛОЖЕНИЯ. Завершаем обход встретив отправную точку.

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

Сам факт образования дырки это когда 2 многоугольника имеют более 2х пересечений сторон. Каждая лишняя пара пересечений - новая дырка.

Число пересечений всегда кратно 2м.

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

Если не найдено свободных вершин - многоугольник вычтен полностью.

Ну и т.д.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (24.02.2009)