запустите алгоритм древовидной карты, затем сожмите каждый прямоугольник, пока он не будет иметь правильные пропорции для своего тайла (эквивалентно уменьшению тайла)

проблема. У меня есть прямоугольный холст, который имеет размер 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) затем нарисуйте плитку одну за другой ...

Но это не всегда работает. Иногда я получаю плитки вне холста .. *

Ответы на вопрос(5)

Ваш ответ на вопрос