2013-06-16 2 views
1

Я не знаю, как правильно указать, что я хочу на английском, прошу вас о помощи. Мне нужен алгоритм для размещения ряда прямоугольников в другом прямоугольнике, например, на this site.Размещение прямоугольников в другом прямоугольнике

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

+2

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

+0

Попробуйте этот вопрос/ответы: http://stackoverflow.com/questions/3476778/find-k-rectangles-so-that-they-cover-the-maximum-number-of-points – darijan

+0

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

ответ

2

Проблема называется rectangle packing.

Общая проблема с упаковкой прямоугольника принимает набор прямоугольников в качестве входных данных и должна найти упаковку, которая занимает наименьшую площадь. Это безумно сложно сделать и тема ongoing research (PDF).

К счастью, все становится намного легче, если вы уже довольны «хорошим» решением и не нуждаетесь в абсолютном минимуме. В частности, очень эффективное приближение - так называемая нарезная упаковка. Идея в основном заключается в создании двухмерного kd-Tree для упаковки.

This site имеет отличное объяснение того, как это работает.

+0

А ... упаковка ... это то слово, которое я искал. Спасибо. – Marius

2

Большинство таких реализаций используют динамическое позиционирование с использованием javascript. Вы можете проверить jquery masonry. Его каскадная библиотека макета сетки написана в javascript. This является ссылкой на источник github (check out masonry.js)

+0

Спасибо, я посмотрю на эту библиотеку. – Marius

3

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

Вот несколько ссылок, чтобы вы начали:

Example 1

Fiddle Example

HTML

<div id="container"> 
<div class="item"></div> 
<div class="item w2"></div> 
<div class="item"></div> 
<div class="item w2"></div> 
<div class="item h2"></div> 
<div class="item"></div> 
<div class="item h2"></div> 
<div class="item w2 h2"></div> 
<div class="item"></div> 
<div class="item"></div> 
<div class="item h2"></div> 
<div class="item"></div> 
<div class="item"></div> 
<div class="item w2"></div> 
<div class="item h2"></div> 
<div class="item"></div> 
<div class="item h2"></div> 
</div> 

CSS

body { 
font-family: sans-serif; 
} 

#container { 
border: 1px solid; 
padding: 5px; 
} 

.item { 
width: 60px; 
height: 60px; 
float: left; 
margin: 5px; 
background: #CCC; 
} 

.item.w2 { 
width: 130px; 
} 

.item.h2 { 
height: 130px; 
} 

JavaScript

$(function() { 

$('#container').masonry({ 
    itemSelector: '.item', 
    columnWidth: 70 
}); 

}); 
+0

Спасибо, что нашли время.Я изучу библиотечный код, чтобы убедиться, что это то, что я ищу. – Marius

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