Алгоритм разбить прямоугольник на n меньших прямоугольников и рассчитать каждый центр - PullRequest
2 голосов
/ 06 февраля 2011

Я ищу простой алгоритм, который, учитывая прямоугольник шириной w и высотой h, разбивает прямоугольник на n более или менее прямоугольников одинакового размера и формы и вычисляет центр этих прямоугольников.

РЕДАКТИРОВАТЬ: забыл упомянуть, что формы должны быть максимально похожи на квадрат.

Любые советы, как начать?

1 Ответ

8 голосов
/ 06 февраля 2011

Простой алгоритм состоит в том, чтобы разделить по вертикали на n полос одинакового размера высотой h и шириной w / n.

Если вы предполагаете, что исходный прямоугольник имеет углы (0,0) и (w, h)затем, используя этот алгоритм, прямоугольник i th будет иметь центр (w / n * (i + ½), h / 2) для 0 <= i <n. </p>


Обновление: попробуйте найти все разложения числа n на пары факторов (i, j), чтобы i * j = n, и найти пару факторов, чтобы отношение факторов было наиболее близким к отношению сторон прямоугольника,Затем используйте два фактора для создания регулярной сетки меньших прямоугольников.

Например, когда n равно 10, вы можете выбрать между (1, 10), (2, 5), (5, 2) и (10, 1).Вот пример сетки с использованием факторов (5, 2):

------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------
|      |      |      |      |      |
|      |      |      |      |      |
------------------------------------

Если ваш исходный прямоугольник имеет ширину 60 и высоту 20, то использование пары факторов (5, 2) даст десять прямоугольников размера (60/5, 20/2) = (12, 10), что близко к квадрату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...