![]() |
мат кол-во невидимых блоков
Собственно как то давно создавал похожую тему, просто щас конкретно допер где глюк.
Задача : есть допустим 100 спрайтов, разной высоты, они помещаются в контейнер таким образом, что если общая высота спрайтов превышает контейнер, то спрайты переносятся на след страницу ( но не наглядно, а в памяти так сказать ). Как считал кол-во страниц : Код AS3:
Допустим на первой странице поместилось 3 спрайта, а 4 спрайт очень большой и занял всю вторую страницу, на 3й странице появился маленький спрайт, но фишка в том, что этот маленький спрайт совершенно легко мог быть помещен на 1 страницу в свободное место, поэтому такая система считает, что страниц всего 2, а не 3. Вот думаю как лучше решить, наверное стоит сначала сортировать вектор по мин > макс высоте , а потом только прогонять в цикле. или есть лучше решение? |
Где-то была тема по наиболее оптимальному заполнению прямоугольной области фигурами. Там это было необходимо для текстурирования, и там давали ссылки на алгоритмы. Думаю это должно помочь.
Upd. а вообще можно так реализовать из массива значений берем максимальное, если место осталось - перебираем максимальное из подходящих и так далее. А при переходе на новую страницу просто page++. |
может лучше считать листы при их формировании а не отдельной функцией?
|
Данные динамические постоянно обновляются значит и листы постоянно обновляются.
TanaTiX - а разве вариант сортировки не поможет, как я предложил? |
Сортировка не спасет.
Например есть спрайты с размерами: 5 4 3 2 Отсортированные. Размер страницы восемь. Туда влезет 5 + 3, но не 5+4. В итоге упрешься в то же что у тебя сейчас. |
Наверное немного не так
сортируем 2,3,4,5 размер 8. страница 1 : 2 + 3 страница 2 : 4 ( ибо 4 + 5 не выйдет, а 2 и 3 уже просчитано ) страница 3: 5 все четко |
В зависимости от количества элементов, разница между реальностью и расчетным количеством может накапливаться. Поэтому лучше это делать при построении страниц. К тому же алгоритм практически одинаков.
Добавлено через 23 минуты Наверняка не самый лучший вариант, но на скорую руку... Код AS3:
|
Задача о рюкзаке?
|
TanaTiX да, алгоритм тяжелый получился :) если лучше не придумаю придется наверное так
|
Цитата:
|
Привет TanaTix снова. Че то я сел за алгоритм, и решил его еще проще чем было изначально , вот как все вышло
Код AS3:
|
| Часовой пояс GMT +4, время: 10:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.