Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расстановка элементов в диаграмме, Подскажите возможный алгоритм 
:(
    Опции темы
sQu1rr
Дата 27.9.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Уважаемые, форумчане smile

Решили с другом сделать генератор диаграмм для презентации в стиле WP7.
Застрял на алгоритме размещения элементов, прилагаю скрин
Смысл в том, что хотелось бы, что бы элементы по краям равнялись (stick) к ближайшим элементам (точнее к уровню их границ), а то получается слишком много безсмысленных свободных мест.
( Например на 2й картинке (с цифрой 3) видно, что нижний квадрат 67% равняется по правой границе с верхним, что выглядит не очень красиво, было бы лучше со средним )

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

Зааранее спасибо
PM MAIL Skype GTalk   Вверх
sQu1rr
Дата 1.10.2011, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Неужели ни у кого нету идей?  smile 
PM MAIL Skype GTalk   Вверх
_Y_
Дата 1.10.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Поищи по этой ветке (Алгоритмы). Мне кажется, подобное обсуждалось уже несколко раз. Но не недавно.

Кстати, на последней картинке у тебя чем больше объект, тем ближе он к центру. Если этот вариант устраивает, то можно отсортировать объекты по размеру. Нарисовать самый большой, потом добавить второй. Третий и последующие добавлять по принципу "найти такое место, чтобы внешние габариты всей картинки были минимальны". Понятное дело, что к габаритам каждого объекта надо добавить размер обязательных полей.



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


Опытный
**


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

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



Цитата(_Y_ @  1.10.2011,  14:18 Найти цитируемый пост)
Поищи по этой ветке (Алгоритмы). Мне кажется, подобное обсуждалось уже несколко раз. Но не недавно.

Искал вроде, не помните название случайно?

Цитата(_Y_ @  1.10.2011,  14:18 Найти цитируемый пост)
чем больше объект, тем ближе он к центру

Ну как сказать. У меня такой алгоритм, что он сортирует по площади и сует первый в центр, а другие относительно него.

Цитата(_Y_ @  1.10.2011,  14:18 Найти цитируемый пост)
найти такое место, чтобы внешние габариты всей картинки были минимальны

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


Цитата(_Y_ @  1.10.2011,  14:18 Найти цитируемый пост)
Понятное дело, что к габаритам каждого объекта надо добавить размер обязательных полей.

Всмысле?

btw, алгоритм строит диаграмму в условном пространстве, потом увеличивает ее до нужных размеров.

Мне это не то что важно, способ выкрутиться я то найду, просто что б, как говорица не изобретать велосипед, да еще и
Цитата(_Y_ @  1.10.2011,  14:18 Найти цитируемый пост)
Поищи по этой ветке (Алгоритмы). Мне кажется, подобное обсуждалось уже несколко раз. Но не недавно.

обнадеживает, найти бы  smile 

Спасибо за ответ
PM MAIL Skype GTalk   Вверх
_Y_
Дата 1.10.2011, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В том-то и дело что не помню - было это году в 2010 наверное. Я попытался поискать - не нашел. Вроде я даже писал там что-то. Но поиск на мой ник не работает - слишком ник короткий.

Что помню: прямоугольные элементы расставлялись красиво в прямоугольном же поле. Кажется задавался приоритет - какие зрительные линии выравнивать в первую очередь. Ну, например, верхний край важнее нижнего, внешние края важнее внутренних, и т.п.

Кстати, еще можно покопать в сторону алгоритмов размещения элементов на изображениях графов. 

Я, например видел такой:
Элементы графа располагаются как бог пошлет.
Задается критерий оптимизации - например наименьшее занятое пространство или наименьшие габариты.
Элементы начинают дергательные движения в надежде занять места, лучшие с точки зрения оптимизации.

К этому наверняка можно и генетические алгоритмы прикрутить - проверять перестановки между элементами.



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


Опытный
**


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

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



Цитата(_Y_ @  1.10.2011,  19:10 Найти цитируемый пост)
К этому наверняка можно и генетические алгоритмы прикрутить - проверять перестановки между элементами.

Дело в том что данная реализация сделана на javascript (да я знаю, ничего не говорите, я бы с удовльсвием на С/С++ написал бы, если бы это не нужно было бы для сайта), и скорость играет не маленькое значение. Пороюсь в сторону графов, конечно, но был бы признателен, если бы все же нашли ту тему smile
PM MAIL Skype GTalk   Вверх
_Y_
Дата 2.10.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(sQu1rr @  2.10.2011,  03:28 Найти цитируемый пост)
но был бы признателен, если бы все же нашли ту тему
 Единственная надежда - если из глубин моего подсознания всплывет какое-нубудь уж очень поископригодное слово, которое было в той теме. К сожалению плавание слов в подсознании - процесс стохастический. Может сегодня всплывет, а может к концу существования вселенной smile 

Но если javascript, то врядли можно загружаться сложными алгоритмами. Может сделать примерно по такому принципу:
  • Задать габаритную рамку.
  • К верхнему левому углу прижать самый широкий элемент. 
  • Подобрать подходящий, чтобы заполнить правый верхний.
  • Поискать элемент или элементы, которые поместятся между ними, прижимаясь к верхней границе.
  • Выровнять просветы между этими элементами.
  • Дальше заполнять сверху вниз, стараясь заполнить путстые места. Каждый следующий элемент пытаться равнять по ближайшей границе. Если границ две, приоритет будет верхняя-левая-правая-нижняя.
  • Если элемент находится внутри поля и с краями не граничит - равнять по соседним элементам пользуясь тем же приоритетом.
  • Если равнять не по чему, пользоваться неким заранее заданным размером просвета между элементами или равномерно распределять несколько элементов.
Если последовательность элементов имеет значение, принцип тот же, но подбирать по размеру уже нельзя. В остальном так же.




Это сообщение отредактировал(а) _Y_ - 2.10.2011, 10:09


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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