Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отрисовка линии с обтеканием рандомных шейпов 
V
    Опции темы
mgarin
Дата 6.8.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Заголовок, однозначно, требует пояснение.

Думаю, многие работали с тем же Visio или подобными приложениями - там есть возможность линковать
различные фигуры линиями или стрелками.

Так вот меня интересует подобный функционал...


1. Предположим есть некая абстрактная область на которой лежит 10 прямоуголников (в случайных местах, могут пересекаться или полностью перекрываться друг другом) 
2. Есть точка A(x,y) и точка B(x2,y2)

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


Думаю, тема изъезженная, но найти что-либо сложно ибо поисковики пока не умеют искать по описанию-трактату =/

Интересует - есть ли какая готовая библиотека или готовый алгоритм на данную тему?
PM MAIL WWW ICQ   Вверх
Amp
Дата 6.8.2010, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Первое, что пришло на ум - волновой алгоритм.
PM MAIL   Вверх
kamre
Дата 7.8.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mgarin @ 6.8.2010,  17:36)
Интересует - есть ли какая готовая библиотека или готовый алгоритм на данную тему?

Готовая библотека: http://www.yworks.com/en/products_yfiles_about.html
Из open source есть библиотека http://www.eclipse.org/gef/zest/, в которой реализованы алгоритмы раскладки графа и проведения ребер.
PM MAIL   Вверх
mgarin
Дата 9.8.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



http://www.eclipse.org/gef/zest/ - судя по всему умеет кое-что делать, но возможно ли это использовать при наличии моих собственных объектов на моей области (на которой я сам все отрисовываю), которые необходимо обходить теми самыми линиями?

http://www.yworks.com/en/products_yfiles_about.html - аналогичный с 1ым вопрос, только плюс - брать такого плана платную библиотеку ради 1% ее функционала...

> Первое, что пришло на ум - волновой алгоритм. 
А вот об этом можно поподробнее?)
Нашел только один пример реализации на Java (http://in7.org.ru/?p=4387), да и то, без пол-литра...
PM MAIL WWW ICQ   Вверх
Amp
Дата 9.8.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mgarin @  9.8.2010,  09:34 Найти цитируемый пост)
А вот об этом можно поподробнее?)
Нашел только один пример реализации на Java (http://in7.org.ru/?p=4387), да и то, без пол-литра... 

Зачем копаться в чужом коде? Алгоритм прост - почитайте описание и запрограммируйте. Если устроит его производительность, то можете использовать в своем приложении.

Это сообщение отредактировал(а) Amp - 9.8.2010, 10:42
PM MAIL   Вверх
mgarin
Дата 9.8.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нашел подробное описание алгоритма (http://www.codenet.ru/progr/alg/way.php)
Впринципе, оно конечно должно работать, вот только у меня есть сомнения насчет оптимальности.

У меня область может достигать размеров 10000х10000 и для каждой отдельной линии будет вестись пересчет при каждой отрисовке...
Даже если кэштровать расчеты - любое передвижение объектов будет сбрасывать кэш и приводить к жутким подлагиваниям.

Но это в теории...
PM MAIL WWW ICQ   Вверх
jk1
Дата 9.8.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В целях оптимизации можно попробовать следующий подход: считать узлами графа для поиска пути не отдельные пиксели, а квадраты 10x10 или 20x20. А уже потом, в пределах полученного коридора, строить линию. Это правда потребует размещения объектов с шагом, соответствующим стороне квадрата.

Также можно попробовать заменить волновой алгоритм алгоритмом Дейкстры.

Это сообщение отредактировал(а) jk1 - 9.8.2010, 13:47


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
maxim1000
Дата 9.8.2010, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

так что узлами графа можно считать углы прямоугольников и исходную с конечной точки
рёбра - отрезки между точками, если они ничего не пересекают, если пересекают - нет ребра

Добавлено через 1 минуту и 38 секунд
отступ в первом приближении можно считать прямоугольником с бОльшими сторонами

если прямоугольник с отступом будет более сложной фигурой, алгоритм соответственно усложнится...


--------------------
qqq
PM WWW   Вверх
kamre
Дата 10.8.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mgarin @ 9.8.2010,  09:34)
http://www.eclipse.org/gef/zest/ - судя по всему умеет кое-что делать, но возможно ли это использовать при наличии моих собственных объектов на моей области (на которой я сам все отрисовываю), которые необходимо обходить теми самыми линиями?

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

Еще вот ссылки собраны по теме: http://rtsys.informatik.uni-kiel.de/trac/k...LayoutLibraries

Встречался мне интересный пример с исходниками, где есть обход препятствий: http://www.javagaming.org/index.php/topic,21301.0.html Может быть из него удастся что-то полезное извлечь.
PM MAIL   Вверх
mgarin
Дата 17.8.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вобщем, всем спасибо, буду думать над своим конкретным случаем и что будет оптимальнее применить.
Вероятно придется повозиться и потестить smile
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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