2009-11-24 6 views
0

ОК, поэтому в моем приложении для маленьких альбомов (в Flash/AS3, но язык не имеет значения), на каждой странице есть 5x4 сетка фотографий. Тем не менее, некоторые фотографии я хочу подняться в известность, поэтому вместо того, чтобы занимать пространство 1x1, некоторые из них занимают пространство 2x2.Создание фотоальбома; Нужен алгоритм для динамического размещения изображений разного размера.

Итак, если у меня есть массив объектов изображения, которые я повторяю, чтобы упорядочить страницы последовательно ... как лучше всего отслеживать: а) когда страница заполнена и б) если 2x2 фото будет соответствовать заданной точке сетки?

Например, в этом случае были помещены первые четыре фотографии (отмеченные символом x). Пятая фотография - 2x2 ... она, очевидно, не может вписываться в 1-й ряд, 5 col. position ... Какой хороший алгоритм для решения, что он должен быть помещен в следующую строку, и что 1x5-я позиция открыта для следующей фотографии 1x1?

 
XXXXO 
OOOOO 
OOOOO 
OOOOO 

ответ

0

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

Так что если вы вытаскиваете эти фотографии из списка, прыгайте вперед, пока не найдете большой (или два или три, сколько бы вы ни пожелали), и разместите их. Затем вернитесь туда, где вы начали, и заполните неиспользуемые изображения (пропуская большие, очевидно). Чтобы отслеживать, все ли заполнено, вы можете сохранить счетчик, который учитывает 1 для небольших изображений и 4 для более крупных, пока он не достигнет 20.

+0

Было бы проще, но мне хотелось бы, чтобы сочетание маленьких и больших изображений на каждой сетке ... Счетчик - это одна часть решения, но какую структуру данных/дизайн следует использовать, чтобы понять, что пространственное расположение в сетке будет/не вмещать большое изображение? – 2009-11-24 17:24:10

+0

Я понимаю, что вы хотите микс, я имел в виду, что вы должны проходить через эту процедуру каждый раз, когда отображается сетка. Поэтому, если вы берете пустую сетку, тогда разместите, скажите два больших изображения, вам не нужно беспокоиться о том, чтобы определить, есть ли у них комната, вы знаете, что они это делают. Поэтому в этот момент вы можете просто заполнить его 1x1 изображениями. Чтобы выяснить, где разместить большие, вы могли бы придумать несколько заранее определенных аранжировок (например, 1,1 и 4,4 - верхний левый угол больших), поскольку на самом деле их очень мало возможности. –

Смежные вопросы