|
|
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Дано прямоугольник (x1,y1,x2,y2) Rect_Big Есть более мелкий прямоугольник ( заготовка) Rect_x Известен только его размер. w1, h1. в произвольном порядке накидали 5 элементов Rect_x в Rect_Big. Надо положить шестой на свободное место ( не закрывая другие 5 Rect_x) в Rect_Big. Как вычислить эту свободную нычку? Если ее нет, то не добавлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 03:59 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Если взять по простому то задачку можно попробовать решить так: 1 - берем 2 любых из 5 прямоугольников. 2 - берем крайние координаты, скажем если первый выше второго то надо взять левый нижний угол у первого и верхний правый в у второго если разница между координатами X будет больше ширины вписываемого и разница между Y больше высоту вписываемого то ляпай в любо место между двумя прямоугольниками. 3 - и так далее перебираем расстояния между границами прямоугольников, не забываю проверять что бы другие прямоугольники уже не находились в этих границах. 4 - так же необходимо проверять расстояние от этих прямоугольников до границ "окна" примерно как то так - если посчитать все расстояния можно сделать вывод о том куда ляпнуть свободный прямоугольник www.aleksandr-pro.ru/images/primerno.gif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:14 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Volochkova, стороны прямоугольников всегда параллельны осям координат? Rect_x может поворачиваться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:20 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Volochkova, множество возможных значений координат дискретно или непрерывно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:21 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Volochkovaв произвольном порядке накидали 5 элементов Rect_x в Rect_Big.При этом они могли перекрыться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:22 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
По-моему, это задача раскроя. Решается методами линейного программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 10:54 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
green_2005По-моему, это задача раскроя. Решается методами линейного программирования.Можно, конечно, и линейным, но как-то из пушки по воробьям. Я бы решал "теорией голодной козы", построив геометрическое место точек, где может находиться центр нового прямоугольника. То есть я бы внешний прямоугольник уменьшил на w1 по ширине и h1 по высоте (получил бы (x1+0.5*w1, y1+0.5*h1, x2-0.5*w1, y2-0.5*h1), в него накидал аналогично увеличенных мелких прямоугольников, где внешний прямоугольник оказался не закрыт, там можно разместить центр нового прямоугольника. Если новый можно крутить, то повторить процедуру, поменяв w1 и h1 местами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 11:55 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Volochkova, Предлагаю продолжить методом Монте-Карло: Так же произвольно, как и первые пять, кидаем шестой прямоугольник. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 11:55 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_Предлагаю продолжить методом Монте-Карло: Так же произвольно, как и первые пять, кидаем шестой прямоугольник. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:01 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ru Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз. А оно разве грузится как-то по-другому? Я недавно мебель перевозил. Впечатления еще свежие. Кстати, у топикстартера идет речь именно о первоначальном произвольном размещении прямоугольников. При этом опущены некоторые детали (параллельны ли стороны больших и малых прямоугольников). По-моему дальнейшее случайное размещение вполне логично. Если Монте-Карло не подходит, то можно эвристики предложить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:11 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_iv_an_ru Предлагаю так суда грузить. Кидаем трактор в трюм. Если он лег удачно (без перекрытий) - так и оставляем. Если нет, повторяем еще раз до победного конца, но не более заранее оговоренного числа раз.А оно разве грузится как-то по-другому?Академик Крылов в своих мемуарах подробно описывает загрузку некоторых сухогрузов как своё отдельное серьёзное достижение. А вообще почти всегода стивидором рулит дяденька с профильным в/о и хорошим стажем.[/quot] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:28 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Навскидку можно так (насчет оптимальности большие сомнения): 1) Создаем некую древовидную структуру-индекс, для быстрого нахождения прямоугольника Rect_x по точке внутри него (как именно - надо уточнять). Т.е. имеется точка, надо выяснить, в каком она прямоугольнике. Хотя если количество их так и останется 5, то этот пункт необязателен. 2) Устанавливаем X=x1, Y = y1. 3) Пока Х <= x2-w1: 4) Пока Y <= y2-h1: Проверяем возможность разместить прямоугольник от точки (X, Y) (а именно попадание красных точек в имеющиеся прямоугольники). Если получилось - усё, приехали. Иначе запоминаем наименьший правый край из помешавших прямоугольников (R), их наибольший bottom (B) и делаем Y = B, возврат к п. 4. 5) Из всех R берем наименьший (r), делаем X = r, возврат к п. 3. Тут, конечно, неизбежны повторные проверки, но гарантируется конечное число ходов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:29 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
У нас пошел разговор в стиле: "А если вы бочку друг на друга надумаете катить, то это уже контейнерные перевозки, это вам в "Трансагенство"..." Я только руководил разгрузкой одинаковых вагонов с одинаковыми грузами (бумага). Так вот, все вагоны были загружены как-то по особому. Число единиц груза было всегда разным. В журнале "Текстильная промышленность" когда-то была рассмотрена оптимизация распроя полотна на прямоугольные заготовки. Там очень подробно эвристики были рассмотрены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:34 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_, Раскрой одно время был вообще модной темой, (а распил ещё моднее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:38 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Volochkova... При каждом добавлении нового нужно доказывать формальную возможность положить шестой. Тоесть для данного случая к примеру, уже после 1 швыряния куска прямоугольника шестой положить никак невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:39 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
iv_an_ru, Главный вывод из той статьи: Задача раскроя не имеет внятного аналитического решения. Поэтому и возились с эвристиками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:43 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Яростный МечНавскидку можно так (насчет оптимальности большие сомнения): У меня тоже. Можно быстрее. 1. Мысленно растягиваем отрезки-стороны маленьких прямоугольников так, чтобы они упёрлись в края экрана. То есть каждый прямоугольник превращается в эдакую '#'. 2. Теперь весь большой прямоугольник разграфлён на клеточки разного размера. Если координаты нигде не повторяются, то клеточек будет 13*13=169, если повторяются то меньше. Вполне мелкая матрица. 3. Делаем целочисленную матрицу такого размера, заливаем нулями, потом "рисуем" в ней уже имеющиеся прямоугольники, забивая целое число клеточек номером прямоугольника. 4. Теперь не проблема пробежаться по матрице, разыскивая прямоугольник нулей подходящих габаритов. Этот алгоритм юзался до Win2000 включительно в оконной системе, потом наши Нские люди предложили более быстрый, который я тут повешусь расписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:49 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_Главный вывод из той статьи: Задача раскроя не имеет внятного аналитического решения. Поэтому и возились с эвристиками.Ясен пень, раз одномерные задачи о ранцах и то сплошь NP-противные, двумерный аналог тем более будет NP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:52 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Я предлагаю следующий вариант: (Предполагается, что все малые прямоугольники выкладываются параллельно сторонам большого и направление больших и малых сторон у всех совпадает) Берем очередной уже выложенный прямоугольник. Пытаемся выложить новый прямоугольник, размещая его в притык к стороне и к углу. Всего 8 возможных вариантов. Если есть перекрытие с другими прямоугольниками - переходим к следующему варианту. Иначе - удалось разместить. Перебираем все исходные пять прямоугольников. Если разместить не удалось - нычки нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:54 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Думаю, нейросеть решит эту задачу быстре чем NP но придётся пожертвовать аналитической точностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:56 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_, Прямоугольники пытаемся размещать как красные на рисунке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:58 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_Пытаемся выложить новый прямоугольник, размещая его в притык к стороне и к углу. Всего 8 возможных вариантов. Не совсем понял, но мне кажется, это отклонение от ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 12:59 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
_some_, Ваш вариант не сможет впихнуть 6-й (зеленый) прямоугольник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 13:28 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
Яростный Меч, Ой! (Тогда остается Монте-Карло) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 14:10 |
|
||
|
Поиск свободной нычки.
|
|||
|---|---|---|---|
|
#18+
щас прикинул по своему варианту - самый худший случай примерно N^2 поисков прямоугольников по точке. Не так плохо (по крайней мере, не NP). + память под структуру для быстрого поиска, но это копейки для современных компов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 14:20 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36889376&tid=1343393]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
189ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 505ms |

| 0 / 0 |
