Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Алгоритм] Многоугольники


Автор: Nymph666 24.12.2007, 09:58
Всем доброго времени суток!
Задачка такая: Даны n простых многоугольников, заданные массивами точек. Найти их пересечение, объединение и разность. 
Кто сталкивался поделитесь опытом smile 
Сдача через 3 дня. Спасайте! smile 

Автор: Akina 24.12.2007, 10:10
Цитата(Nymph666 @  24.12.2007,  10:58 Найти цитируемый пост)
простых многоугольников

это что за зверь?

Цитата(Nymph666 @  24.12.2007,  10:58 Найти цитируемый пост)
Найти их пересечение, объединение 

1 и 2... результат - с 3... и так далее

Цитата(Nymph666 @  24.12.2007,  10:58 Найти цитируемый пост)
и разность

тоже непонятно кто...

Автор: Nymph666 24.12.2007, 10:17
Цитата(Akina @ 24.12.2007,  10:10)
это что за зверь?

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

 Это Логические операции над многоугольниками.
Пересечение -точки, которые принадлежат всем многоугольникам.(логич.И and)
Объединение - точки, которые принадлежат любому из многоугольников. (логич. ИЛИ or)
Разность - Точки одного многоугольника без точек, которые совпадают с точками второго.(xor) 

Автор: Nymph666 14.1.2008, 09:59
появилась новая идея: все многоугольники ориентированы по часовой стрелке. Строя пересечение(объединение) мы двигаемся по точкам пересечения все время направо(налево при объединении). Правда там еще нужна навигационная информация расстояние до многоугольников, вектора. Плюс нужно знать как определять правый вектор...
Кто-нибудь сталкивался с таким алгоритмом?

Автор: maxdiver 29.1.2008, 23:16
Мне тоже хотелось бы почитать что-нибудь про объединение многоугольников. Это на самом деле далеко не тривиальная задача, если учесть например, что несколько многоугольников при объединении дадут что-нибудь вроде кольца - т.е. в центре будет дырка; как обрабатывать и хранить такие вещи непонятно совершенно.

Автор: Nymph666 30.1.2008, 12:27
Довольно не сложно это решается с помощью BSP-деревьев. Этот метод мне подсказал один хороший человек, который помог этим мне написать курсовую работу. Причем там легко обрабатываются и полигоны с дырами. 

Автор: kilonet 4.2.2008, 10:41
ну а всё-таки...
можно хотя бы в общих чертах услышать подход к решению этой проблемы?

Автор: kilonet 6.2.2008, 10:30
Обрисую свою проблему (использую NET Framework): есть многоугольники заданные координатами вершин. Над этими многоугольниками надо выполнять операции объединение или вычитание.
Знаю что есть специальные алгоритмы для этого. Чтобы упростить задачу пытаюсь пока обойтись без них. Делаю так: многоугольники преобразую в регион (Region) для которых операции Union и Exclude уже реализованы в самом Framework-е.  Единственное что потом можно с этим регионом сделать - аппроксимировать его массивом прямоугольников толщиной 1 пиксель (метод GetRegionScans) - т. е. у меня есть координаты вершин многоугольника, надо лишь отсортировать их в правильном порядке и если есть "дырки" внутри многоугольника как-то обнаружить их и найти их координаты в правильном порядке.
У кого-нибудь есть идеи, как это можно сделать?

Автор: Nymph666 13.2.2008, 13:21
Цитата(kilonet @ 6.2.2008,  10:30)


http://en.wikipedia.org/wiki/Binary_space_partitioning
Вот посмотри здесь. 
Цитата
 у меня есть координаты вершин многоугольника, надо лишь отсортировать их в правильном порядке и если есть "дырки" внутри многоугольника как-то обнаружить их и найти их координаты в правильном порядке.

Я использовала ребра а потом рисую 
Код

line(ребро.нач_точка, ребро.конеч_точка);

Поэтому не нужно знать правильной последовательности ребер, просто рисуешь их подряд и все. 
В общем посмотри здесьhttp://forum.sources.ru/index.php?showtopic=216741&st=0.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)