Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике / 25 сообщений из 34, страница 1 из 2
22.02.2018, 06:13
    #39605899
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Здравствуйте, нужен алгоритм вычисляющий ширину квадрата для размещения N-ого количества квадратов в прямоугольнике, чтобы они не выходили за пределы прямоугольника. Как на картинке
...
Рейтинг: 0 / 0
22.02.2018, 06:49
    #39605904
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
У прямоугольника горизонталь А, а вертикаль В.
Имеем множество квадратиков в прямоугольнике, причем количество горизонтальных рядов равно К, а количество вертикальных рядов равно М.
Тогда А / М = В / К.
Или К = В / А х М
Для всех целых М (М>0) ищется К, которое должно быть целым (остаток = 0).

Таких вариантов будет несколько, так как найденное решение можно делить еще на мелкие квадратики до бесконечности.
...
Рейтинг: 0 / 0
22.02.2018, 06:54
    #39605907
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Gennadiy UsovУ прямоугольника горизонталь А, а вертикаль В.
Имеем множество квадратиков в прямоугольнике, причем количество горизонтальных рядов равно К, а количество вертикальных рядов равно М.
Тогда А / М = В / К.
Или К = В / А х М
Для всех целых М (М>0) ищется К, которое должно быть целым (остаток = 0).

Таких вариантов будет несколько, так как найденное решение можно делить еще на мелкие квадратики до бесконечности.
Забыл про значение N.
При дроблении квадратиков до бесконечности их количество сравнивается с N.
Решения может и не быть.
Тогда накладываются ограничения на А и В. (которые сидят на трубе)
...
Рейтинг: 0 / 0
22.02.2018, 07:05
    #39605908
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2,

Не указано, что дано, кроме количества N
...
Рейтинг: 0 / 0
22.02.2018, 07:28
    #39605914
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
А есть еще интересная задача: найти прямоугольники для N квадратов.
В прямоугольнике квадраты выстраиваются в ряды по вертикали, и их общее количество получается как произведение количества рядов на количество вертикалей.
Следовательно, надо для величины N найти множители.
Эти множители определяют количества рядов и вертикалей.
...
Рейтинг: 0 / 0
22.02.2018, 07:31
    #39605916
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
MBo,

Дано ширина, высота прямоугольника и количество квадратов которых нужно разместить.
Код: c#
1.
2.
3.
4.
int rect_w = 300; // ширина прямоугольника
int rect_h = 200; // высота прямоугольника
int sqr_count = 6; // Кол-во квадратов
int sqr_side = ? // Нужно получить длину стороны квадрата
...
Рейтинг: 0 / 0
22.02.2018, 07:41
    #39605917
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2MBo,

Дано ширина, высота прямоугольника и количество квадратов которых нужно разместить.
Код: c#
1.
2.
3.
4.
int rect_w = 300; // ширина прямоугольника
int rect_h = 200; // высота прямоугольника
int sqr_count = 6; // Кол-во квадратов
int sqr_side = ? // Нужно получить длину стороны квадрата


Подставьте эти данные в уравнение 21210127 а далее методом перебора: 1 - 1,5, 2 - 3
2 х 3 = 6
...
Рейтинг: 0 / 0
22.02.2018, 08:09
    #39605923
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Количество квадратов сбивает с толку. Без него задача красиво решалась бы через НОД.
...
Рейтинг: 0 / 0
22.02.2018, 08:21
    #39605926
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Gennadiy Usov,

Не понял, можно пример в коде?
...
Рейтинг: 0 / 0
22.02.2018, 08:29
    #39605929
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2Здравствуйте, нужен алгоритм вычисляющий ширину квадрата для размещения N-ого количества квадратов в прямоугольнике, чтобы они не выходили за пределы прямоугольника. Как на картинке
wewenami2Дано ширина, высота прямоугольника и количество квадратов которых нужно разместить.
Код: c#
1.
2.
3.
4.
int rect_w = 300; // ширина прямоугольника
int rect_h = 200; // высота прямоугольника
int sqr_count = 6; // Кол-во квадратов
int sqr_side = ? // Нужно получить длину стороны квадрата




Код: plaintext
1.
2.
3.
4.
5.
if(rect_w * rect_h >= sqr_count) {
   sqr_side = 1;
} else {
  // Задача не имеет решения
}


Решение удовлетворяет всем поставленным условиям
...
Рейтинг: 0 / 0
22.02.2018, 08:34
    #39605931
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Бордюр на первой картинке - сбивает с толку. Если стояла задача сделать 6 квадратов с максимально
возможной стороной - то картинка неправильная. Существует другой расклад.
...
Рейтинг: 0 / 0
22.02.2018, 08:45
    #39605935
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Вот ещё пример как должно это работать, квадраты должны бить максимально возможного размера
...
Рейтинг: 0 / 0
22.02.2018, 08:51
    #39605937
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2Gennadiy Usov,

Не понял, можно пример в коде?
Странно. Вам предоставлен алгоритм, есть формула, где есть итерация по М 21210127 , есть условие нахождения N 21210136 , почему вы не можете написать программу? Или уже не нужно?
...
Рейтинг: 0 / 0
22.02.2018, 08:57
    #39605941
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Gennadiy Usov,

Я не понимаю вашу формулу и как реализовать её в коде.
...
Рейтинг: 0 / 0
22.02.2018, 09:04
    #39605943
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2Gennadiy Usov,

Я не понимаю вашу формулу и как реализовать её в коде.
В какой строке вы не понимаете формулу?
В первой, где "У прямоугольника горизонталь А, а вертикаль В."?
...
Рейтинг: 0 / 0
22.02.2018, 09:19
    #39605952
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Если сторона квадрата А, то в прямоугольника данного размера вмещается (Width div А) столбцов и (Height div А) рядов. Учитывая, что последний может быть не заполнен, можно записать необходимое неравенство:

Код: html
1.
  (Width div A) * (Height div A) >= N



Максимальное значение стороны может быть

Код: html
1.
AMax = Sqrt(Width * Height / N)



Так что можно начать с указанного значения и сделать линейный поиск по значению А вниз, пока не будет выполняться неравенство выше.


(Если размеры и N очень большие, то можно использовать бинарный поиск)
...
Рейтинг: 0 / 0
22.02.2018, 09:24
    #39605958
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2Вот ещё пример как должно это работать, квадраты должны бить максимально возможного размера
Код: sql
1.
Количество квадратов по ширине = ОкруглитьВверх(Корень(К * (Ш / В)))


где
К - Нужное количество квадратов
Ш - Ширина
В - Высота
...
Рейтинг: 0 / 0
22.02.2018, 10:21
    #39605985
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Я не понимая что за формулы вы пишите давайте функцией на си подобном языке:
Код: c#
1.
2.
3.
4.
5.
6.
int GetSquareSize(int rect_wid, int rect_hei, int squre_count)
{
    int result = 0;
    // какие-то вычисления
    return result;
}
...
Рейтинг: 0 / 0
22.02.2018, 10:29
    #39605988
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
"Я ничего не умею, дайте готовое решение, а я уж как нибудь его скопирую".
Раздел "Работа" - рядом .
...
Рейтинг: 0 / 0
22.02.2018, 10:30
    #39605990
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2,

+1 но с этого надо было начинать топик. Ты сам задал моду на словесное описание вот тебе и отвечали на словах.
...
Рейтинг: 0 / 0
22.02.2018, 14:01
    #39606120
cronix111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
1. Посчитайте площадь прямоугольника S = A*B, где A,B - стороны прямоугольника.
2. Поделите площадь на N: q = S/N, где N - количество размещаемых квадратов.
3. Извлеките квадратный корень из результата a = sqrt(q).
4. Поделите стороны прямоугольника на результат a, и возьмите остаток от деления: ra = rem(A/a), rb = rem(B/a).
5. Если ra <= rb, то сторона искомого квадрата x = a - ra/N.
6. Иначе (ra > rb) x = a - rb/N.
...
Рейтинг: 0 / 0
22.02.2018, 14:51
    #39606171
cronix111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
cronix1111. Посчитайте площадь прямоугольника S = A*B, где A,B - стороны прямоугольника.
2. Поделите площадь на N: q = S/N, где N - количество размещаемых квадратов.
3. Извлеките квадратный корень из результата a = sqrt(q).
4. Поделите стороны прямоугольника на результат a, и возьмите остаток от деления: ra = rem(A/a), rb = rem(B/a).
5. Если ra <= rb, то сторона искомого квадрата x = a - ra/N.
6. Иначе (ra > rb) x = a - rb/N.

прошу прощения, в 5,6 явно ошибка.

5. Если ra <= rb, то сторона искомого квадрата x = a - ra/div(A/a), где div(A/a) - целая часть от результат деления A/a.
6. Соответственно, и здесь x = a - rb/div(B/b).

Так вроде бы верно.
...
Рейтинг: 0 / 0
22.02.2018, 15:48
    #39606219
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
cronix111cronix1111. Посчитайте площадь прямоугольника S = A*B, где A,B - стороны прямоугольника.
2. Поделите площадь на N: q = S/N, где N - количество размещаемых квадратов.
3. Извлеките квадратный корень из результата a = sqrt(q).
4. Поделите стороны прямоугольника на результат a, и возьмите остаток от деления: ra = rem(A/a), rb = rem(B/a).
5. Если ra <= rb, то сторона искомого квадрата x = a - ra/N.
6. Иначе (ra > rb) x = a - rb/N.

прошу прощения, в 5,6 явно ошибка.

5. Если ra <= rb, то сторона искомого квадрата x = a - ra/div(A/a), где div(A/a) - целая часть от результат деления A/a.
6. Соответственно, и здесь x = a - rb/div(B/b).

Так вроде бы верно.
А если А = В = 300, и N = 6, то что тогда?
...
Рейтинг: 0 / 0
22.02.2018, 17:05
    #39606260
wewenami2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
Вроде получилось у меня сделать как сказал MBo:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
int itsize = (int)Math.Sqrt((rect.Width * rect.Height) / items.Count);
while(true)
{
    if(Math.Floor((decimal)rect.Width / itsize) * Math.Floor((decimal)rect.Height / itsize) >= items.Count)
        break;
    else
        itsize -= 10;
}


Пока глюков не обнаружил
...
Рейтинг: 0 / 0
22.02.2018, 17:24
    #39606268
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике
wewenami2,
Все верно, в цикле в условии

Код: plaintext
1.
if(Math.Floor((decimal)rect.Width / itsize) * Math.Floor((decimal)rect.Height / itsize) >= items.Count)


если Width и itsize целые и язык позволяет для целых аргументов выполнять целочисленное деление, то стоит избавиться от многократного перегона целых во float и обратно

Код: plaintext
1.
if((rect.Width / itsize) * (rect.Height / itsize) >= items.Count)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Вычислить размер квадрата чтобы разместить N-ное кол-во в прямоугольнике / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]