Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/121: Рейтинг темы: голосов - 121, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36

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

29.01.2016, 17:43. Показов 25266. Ответов 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
1979 / 835 / 115
Регистрация: 01.10.2012
Сообщений: 5,180
Записей в блоге: 2
31.01.2016, 07:01
Цитата Сообщение от Fennec Посмотреть сообщение
Методы разрешения коллизий для начала могут выталкивать объект не в том направлении (например в сторону с еще большим количеством препятствий или вообще за края области) либо даже если направление будет выбрано верное необходимо будет сделать огромное количество проверок в случае если мы будет пытаться поставить новый прямоугольник в самый низ этого полузаполненного сосуда. Тем более, если руководствоваться именной идеей физических движков, то они обычно работают так, что будут пытаться растолкнуть объекты вокруг свеже созданного, чего мне совсем не хотелось бы.
Насколько я понял, идея в следующем

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

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

Если так, то нечто подобное я недавно делал, и, к моему удивлению, ожидаемого "провала по скорости" не последовало Но устраивает ли Вас это? Ведь такая расстановка совсем не "последовательная"
0
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
31.01.2016, 12:18  [ТС]
Тут все бы хорошо, только вот в задании говорится, что карту нужно не только сгенерировать, но и уметь в рантайме поставить домик на свободное место. В итоге я сейчас использую совсем плохое решение - тыкаю "пальцем в небо" и смотрю, можно ли было туда поставить домик или нет, если нет, то следует еще один тычок в случайное место и так до тех пор, пока свободное место не будет найдено. Ну или не пройдет 100 попыток.
0
1979 / 835 / 115
Регистрация: 01.10.2012
Сообщений: 5,180
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru