Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация алгоритмов объединения многоугольников 
:(
    Опции темы
Dementor
Дата 1.8.2014, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Всем доброго времени суток!

Суть проблемы: имеется N замкнутых контуров, без самопересечений. Необходимо провести объединение их всех в один замкнутый контур, при этом т.к. с отличной от нуля вероятностью при объединении может получится внутренний контур, то желательно получить и его, но в принципе если он будет потерян - не беда.

Вот пример:
user posted image ==> user posted image

Стоит также сказать, что некоторые контуры могут совпадать друг с другом до 100% (т.е. алгоритм не должен давать сбой в таком случае).

Количество вершин в каждом контуре - не менее 4, но не больше 2000.

Почитал я "Обзор алгоритмов построения оверлеев многоугольников" (О.В. Ченцов, А.В. Скворцов), если правильно понял, то мне вполне подойдет линейно-узловой алгоритм, хотя тут могу быть не прав.

Ну и собственно сам вопрос - есть ли готовые реализации подобных алгоритмов. Если будут еще и с объяснениями, то будет просто супер.

Всем откликнувшимся заранее большое спасибо!
PM MAIL   Вверх
_Y_
Дата 1.8.2014, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



У меня есть идея: тупая, но рабочая.

Делаем все в бинарном растре. Берем белый фон и просто рисуем на белом фоне черные залитые фигуры. Потом заливаем белым все черные пиксели, которые не граничат с белыми. Получаем контур; внутренние контуры не теряются.
 smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Dementor
Дата 1.8.2014, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



_Y_, идея конечно крутая, но не подходит  smile 

У меня была другая идея - взять один основной контур, самый большой, и проверить все отрезки, которые составляют контур на пересечение с отрезками других контуров. Если бы отрезок пересекался, то в основном контуре генерировалась бы новая вершина, равная точке пересечения. Далее из всех второстепенных контуров удалялись бы вершины, находящиеся внутри основного контура или совпадающие с вершинами основного контура, а потом в основной остается добавить все оставшиеся вершины. Конечно внутренний контур бы потерялся, но его наличие желательно, но не обязательно...
Но я так и не понял как после всех этих операций собрать новый контур - там может обход какой-то нужен, например против часовой стрелки от какой-нибудь вершины и проверять остальные вершины, на их положение относительно начальной.
PM MAIL   Вверх
Pavia
Дата 1.8.2014, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Dementor, 
Цитата(Dementor @  1.8.2014,  09:53 Найти цитируемый пост)
Почитал я "Обзор алгоритмов построения оверлеев многоугольников" (О.В. Ченцов, А.В. Скворцов), 

Лично я бы не стал доверять авторам у которых ошибка даже в название. 

Цитата(Dementor @  1.8.2014,  09:53 Найти цитируемый пост)
если правильно понял, то мне вполне подойдет линейно-узловой алгоритм, хотя тут могу быть не прав.

Кроме вас никто не знает, то что вам нужно.  А во вторых вы же не платье выбираете что-бы спрашивать подойдет не подойдет.

По поводу готовых реализаций ищите геометрические библиотеки там есть. Язык вы не уточнили поэтому помочь  более конкретно не могу.

PM MAIL   Вверх
Dementor
Дата 1.8.2014, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Pavia, нашел я библиотеку clipper (версия 6.1.3a). Но к сожалению на C++ Builder она не запускается (кто бы сомневался). Буду сидеть и смотреть чего они там наворотили, для реализации всего этого дела - может все-таки смогу разобраться и запустить на BCB.
PM MAIL   Вверх
Lipetsk
  Дата 5.8.2014, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


в форме ;)
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 28.1.2009
Где: Липецк

Репутация: 2
Всего: 5



может просто удалить все отрезки, которые попадают внутрь другой фигуры, останется что нужно
PM   Вверх
baldina
Дата 5.8.2014, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



PM MAIL   Вверх
Dementor
Дата 6.8.2014, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 9.7.2007

Репутация: нет
Всего: нет



Lipetsk, 
baldina,
Большое спасибо за ссылки и советы - буду разбираться!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.