Как разделить прямоугольник на равные квадраты
Перейти к содержимому

Как разделить прямоугольник на равные квадраты

  • автор:

разделить прямоугольник на n равных частей

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

Я хочу разделить прямоугольник на равные части

Придумал решение для квадрата, но я не могу найти решение для разных соотношений.

Может вы, ребята, можете мне помочь.

1 ответ

Пусть X — ширина прямоугольника, а Y — высота. Пусть цель состоит в том, чтобы разделить этот прямоугольник на N прямоугольников равной площади, стороны которых максимально близки друг к другу.

Решение несложное. Сначала найдите все множители N. Затем запишите N как произведение двух чисел A и B так, чтобы A и B были как можно ближе друг к другу (то есть не существует другого выбора A ‘и B’, такого что | A ‘- B’ | B. Все, что нам нужно сделать, это разместить линии A — 1 вдоль длинной стороны прямоугольника и линии B — 1 вдоль короткой стороны.

Например: n = 4, A = 2 и B = 2 являются оптимальными, поэтому вы помещаете линии A — 1 = 1 и B — 1 = 1 вдоль каждой стороны прямоугольника (как в столбце ХОРОШО для n = 4).

Например: n = 21, A = 7 и B = 3 являются необязательными, поэтому вы разместите 6 строк вдоль длинного края прямоугольника и 2 строки вдоль короткого края, на равном расстоянии:

Конечно, для простых значений N вы не получите очень хорошего решения, но в этом случае хорошего решения нет. В таких случаях, когда A и B очень сильно различаются, а размеры прямоугольника не одинаковы, вы можете выбрать другое решение, которое не требует, чтобы все прямоугольники имели одинаковую длину сторон. Вы могли бы добиться большего успеха, например, допустив в решение 2 или 3 вида прямоугольников или более.

Разрезать прямоугольник на квадраты и вывести список с размерами сторон

На вход функции подается длина и ширина прямоугольника, нужно разрезать его на квадраты и вывести список с размерами сторон этих квадратов. Если исходная длина и ширина равны, вывести 0. Подскажите алгоритм пожалуйста.

Пример вход rect(5,3), выход [3,2,1,1]

Kromster's user avatar

Берем минимальный из двух размеров и выводим его. Затем уменьшаем максимальный размер на минимальный и начинаем сначала. Продолжаем пока один из размеров не станет равен нулю.

Неясно только, почему дано такое неестественное требование «если исходная длина и ширина равны, вывести 0». Логично было бы просто вывести длину — тогда бы этот случай подпадал под общий алгоритм.

Проблема решена за помощи итератора — рекурсивная функция def to_quadrats() при каждом запросе о последующее значение выдает его командой yield i (и затем приостановится и ждёт на последующий запрос).

Сам запрос о последующее и последующее значения итератора (пока он не исчерпается) реализуется функцией list() .

мы ищем самое большое значение (сторону квадрата), для которого его вторая степень (площадь квадрата) ещё не превышает текущую площадь — да, вместо area бы лучше было взять его квадратный корень.

После нахождения такого значения текущая площадь соответственно уменьшится, самое значение выдастся командой yield и цикл for прекращается командой break .

Прямоугольник разделили на квадраты

Прямоугольник разделили на квадраты. На рисунке указаны стороны двух из них. Сторона красного квадрата равна 1, сторона голубого — 7. Найдите стороны всех остальных квадратов и прямоугольника.

Прямоугольник разделили на квадраты

Прямоугольник разделили на квадраты

Решение:

Внимательно посмотрев на рисунок можно легко найти длины сторон каждого квадрата.

Как разрезать прямоугольник на две части так, чтобы из этих частей можно было составить квадрат?

прямоугльник 4х9

Давайте для начала давайте высчитаем площадь нашего прямоугольника. Она равна:

S прям = 4 х 9 = 36 (ед 2 )

Так как наш квадрат должен получиться из этого прямоугольника , то его площадь тоже будет равна 36 ед 2 , а значит сторона искомого квадрата будет 6 единицам. И теперь остается применить логическое мышление, что бы разделить данный прямоугольник.

Вот как это будет выглядеть.

прямоугльник 4х9

Осталось только проверить

квадрат 6х6

Как видим, все получилось очень даже красиво.

Как всегда, желаю всем удачи и успехов!

Мясо всегда вкусно!
Если только не Шер

Мавзолей в Галикарнасе
Мавзолей в Галикарнасе

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *