1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36

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

29.01.2016, 17:43. Показов 25326. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Решаю следующую задачу: есть прямоугольная область определенных размеров, в нее нужно добавлять в случайные места другие прямоугольники, так, чтобы они не вылезали за пределы области и не наползали друг на друга. Пожалуйста, обратите внимание, что это НЕ задача о ранце, мне НЕ нужно набить как можно больше прямоугольников в наименьшую площадь. Задача в том, чтобы после постановки очередного прямоугольника в область разбить ее на свободные прямоугольные подобласти.

Приложил иллюстрацию к тому что хочу сделать.
1) Пустое поле
2) Поставили прямоугольник в ПРОИЗВОЛЬНОЕ место

Области A, B, C, D (да, они ПЕРЕСЕКАЮТСЯ) обозначают места, в которые можно поставить новый прямоугольник площадью меньшей чем площадь этой области.

Чтобы был ясен контекст задачи - я расставляю в случайные места карты домики, соотвествкенно после постановки одного, мне нужно узнать куда я могу поставить новый.
Миниатюры
Разместить прямоугольники внутри прямоугольника  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.01.2016, 17:43
Ответы с готовыми решениями:

Вычисление 2 точек на границе прямоугольника, зная точку внутри прямоугольника и Тангенс угла наклона
Помогите понять общий алгоритм....( Вычисление 2 точек на границе прямоугольника, зная точку внутри прямоугольника и Тангенс угла...

Определить, где находится текущая точка: внутри прямоугольника, снаружи, на границе прямоугольника
Представьте, что у вас на форме есть прямоугольник, границы которого на 10 пикселей отстоят от границ рабочей области формы. Необходимо...

Как разместить произвольные прямоугольники в квадрате?
Есть такая вычислительная задача 1. Задан квадрат размером 22 × 22 2. заданы 44 произвольных прямоугольника. Их размеры: Длина...

26
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
30.01.2016, 22:35  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Проценты.
Что вы вкладываете в эти проценты?

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Не две а новую ячейку для дома. Адаптивная рекурсия.
так и не понял откуда должна появиться новая ячейка. Где как и какого размера вы собираетесь генерировать новую ячейку?

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Не проще нарисовать?
уже нарисовал аж 14 раз

Цитата Сообщение от Excalibur921 Посмотреть сообщение
И ненужно, генератор заполнит достаточно плотно.
Не нужно плотно. Нужно произвольно.

Цитата Сообщение от Excalibur921 Посмотреть сообщение
Так… давайте перефразируем. Вам не нравится простое решение, не хотите его улучшить и продумать нюансы и варианты.
Это не простое решение. Это решение не соответствующее условиям. Это решение для другой задачи.

Приведу цитату из задания
разместить в произвольное свободное место
Это значит что там где стык у ваших двух областей вы ТЕХНИЧЕСКИ НЕ МОЖЕТЕ поставить домик с таким алгоритмом. Вы задаете дополнительные ограничения системе, что прямо противоречит задаче ПРОИЗВОЛЬНОГО размещения.

Еще раз - если вы пытаетесь разместить что-то на сетке из непересекающихся прямоугольников - вы получаете эту проблему. Я уже не знаю как еще объяснить.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2
31.01.2016, 07:01
Цитата Сообщение от Fennec Посмотреть сообщение
Методы разрешения коллизий для начала могут выталкивать объект не в том направлении (например в сторону с еще большим количеством препятствий или вообще за края области) либо даже если направление будет выбрано верное необходимо будет сделать огромное количество проверок в случае если мы будет пытаться поставить новый прямоугольник в самый низ этого полузаполненного сосуда. Тем более, если руководствоваться именной идеей физических движков, то они обычно работают так, что будут пытаться растолкнуть объекты вокруг свеже созданного, чего мне совсем не хотелось бы.
Насколько я понял, идея в следующем

- накидать пр-ков "как получится" и определить правила взаимодействия (напр притяжение/отталкивания)

- запустить симуляцию, т.е сделать N шагов, каждый пр-к будет смещаться согласно правилам и в конце-концов система "само-сбалансируется"

Если так, то нечто подобное я недавно делал, и, к моему удивлению, ожидаемого "провала по скорости" не последовало Но устраивает ли Вас это? Ведь такая расстановка совсем не "последовательная"
0
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
31.01.2016, 12:18  [ТС]
Тут все бы хорошо, только вот в задании говорится, что карту нужно не только сгенерировать, но и уметь в рантайме поставить домик на свободное место. В итоге я сейчас использую совсем плохое решение - тыкаю "пальцем в небо" и смотрю, можно ли было туда поставить домик или нет, если нет, то следует еще один тычок в случайное место и так до тех пор, пока свободное место не будет найдено. Ну или не пройдет 100 попыток.
0
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,217
Записей в блоге: 2
31.01.2016, 13:11
Лучший ответ Сообщение было отмечено Fennec как решение

Решение

Цитата Сообщение от Fennec Посмотреть сообщение
Тут все бы хорошо, только вот в задании говорится, что карту нужно не только сгенерировать, но и уметь в рантайме поставить домик на свободное место. В итоге я сейчас использую совсем плохое решение - тыкаю "пальцем в небо" и смотрю, можно ли было туда поставить домик или нет, если нет, то следует еще один тычок в случайное место и так до тех пор, пока свободное место не будет найдено. Ну или не пройдет 100 попыток.
Я бы не назвал это совсем плохим решением. Смущает баланс цель/средства - писать достаточно сложный алгоритм лишь для того чтобы... случайно поставить пр-к.

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

- берем уголок у которого есть свободная область справа и/или снизу. Находим все уголки образующие с ним пр-к не содержащий др уголков. Все это быстрые операции по 2 сортированным контейнерам.

Дальше я пытался "расширять" найденный пр-к так и сяк, но это хлопотливо и найденные пр-ки повторяются. Правильно взять "хорошие" уголки. Словами затрудняюсь объяснить, см аттач. Точка A - вроде бы "уголок", но на деле выясняется что нет, "правильный" уголок A1 (хотя он вовсе не уголок пр-ка). Поэтому сначала нужно отбросить ненужные уголки и добавить новые, а потом просто "брать пары" (базовый алгоритм). Дальше - ниче не помню
Миниатюры
Разместить прямоугольники внутри прямоугольника  
2
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
31.01.2016, 16:44
Покажите часть карты которую рисовали.
0
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
31.01.2016, 17:04  [ТС]
окей, спасибо!

Видимо все-таки дальше решение на мне
0
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
02.02.2016, 11:26
Fennec
А почему бы вам не задать числовую матрицу.
0 - клетка свободна. 1 - клетка занята
Имея матрицу несложно определить и прямоугольник
нужного вам размера, если таковой существует.
Все просто. Вы берете в матрице нулевой элемент и
начинаете присоединять к нему со всех четырех сторон
свободные клетки (строки и столбцы), если таковые
имеются в наличии. В конечном счете вы получите 4
индекса (по сути местоположение прямоугольника)
Кроме того Вы можете контролировать заполненность
исходного прямоугольника, вычисляя количество
ненулевых элементов матрицы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2016, 11:26

Определить, пересекаются ли прямоугольники R1 и R2, а также площадь прямоугольника сечения
Здравствуйте помогите с программой на с# ссылку на материал или еще лучше пример решения, так как недавно добавили нужно уже лабораторную...

Найти координаты правого верхнего угла минимального прямоугольника, содержащий указанные прямоугольники
Блин, ребят я уже наверно всем надоела, многие думают что я совсем тупая, но мне нужна опять ваша помощь))) 1. Даны два прямоугольника,...

Найти минимальную площадь прямоугольника, в который можно поместить все заданные прямоугольники
В двумерном пространстве заданы n прямоугольников с вершинами в целочисленных координатах и сторонами параллельными осям координат. Найти...

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника, содержащего указанные прямоугольники
Даны 2 прямоугольника,стороны которых параллельны или перпендикулярны осям координат.Известны координаты левого нижнего и правого нижнего...

Окружность внутри прямоугольника
Привет. Нужно чтобы окружность двигалась внутри прямоугольника от края до края. Вот мой код: private void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru