Вот проблема. У меня есть прямоугольный холст, который имеет размер 1. Таким образом, он имеет систему координат (0,0 ... 1,0 - х и 0,0 ... 1,0 - у).
У меня также есть несколько плиток. Плитки тоже прямоугольники. У них разные размеры и количество плиток является переменной.
Я хочу укладывать плиток в прямоугольный холст, от 0,0 до 1,0 ( слева направо, сверху вниз ):
1) плитки должны помещаться на холсте (но заполнять как можно больше места)
2) плитки должны масштабироваться (если они не умещаются), каждая плитка должна масштабироваться на одинаковое количество (они должны оставаться в одинаковых пропорциях).
3) представьте, что у вас в руке есть эти «плитки», и вы помещаете их в этот холст один за другим
4) это почти как «алгоритм TreeMap» но - форма плиток должна быть одинаковой ( прямоугольники ) и мне не нужно заполнять все пространство холст
Есть ли кто-нибудь, кто может показать мне алгоритм на любом языке, подобном C (C, C ++, Java, C #)?
* Я пробовал это.
1) я вычислил площадь плитки, затем я вычислил сумму областей плитки (например: у меня есть две плитки, одна имеет площадь 2, другая область 1, они означают, что у меня есть общая сумма 3)
2) затем я вычисляю, какую «пропорцию» имеет каждая плитка в «общей сумме площадей» (например: 2/3 и 1/3)
3) затем вычислите размер прямоугольной плитки с помощью Math.sqrt (x) (например: Math.sqrt (2/3))
4) затем нарисуйте плитку одну за другой ...
Но это не всегда работает. Иногда я получаю плитки вне холста .. *