Як обчислити, скільки багатокутників я можу помістити всередині багатокутника?


9

Я зазвичай використовую qgis. Я пояснюю свою проблему прикладом: є ліс (неправильна геометрія1) та одне дерево (геомерія2). Я хочу знати максимальну кількість дерев, які може містити ліс. Окрім того, я хочу, щоб форматувала найкраще розташування цих дерев всередині лісу.введіть тут опис зображення


3
Приємна проблема ....
WKT

Я не знаю, як би я навіть почав. Звучить як проблема / алгоритм ступеня магістра.
HeikkiVesanto

2
Якщо ви можете отримати доступ до безкоштовної пробної версії ArcGIS (або завантажити R, який є безкоштовним), у програмному забезпеченні Geospatial Modeling Environment є gencirclesinpolys (Generate Circles In Polygons)інструмент, який може бути корисним.
Йосиф

2
Ви шукаєте інструмент для вирішення проблем із
упаковкою,

1
@Joseph Я використовував інструмент Середовище геопросторового моделювання, він працює. На жаль, інструмент генерує регулярне розташування кіл (або шестикутник) у межах полігонів, це означає, що форма виводу не показує (обов'язково) найкращого розміщення ознак, я маю на увазі максимальну кількість можливих їх.
ксацу

Відповіді:


5

Спробуйте це додаток онлайн svgnest.com/

кроки: 1. svg створює файл (як на малюнку 1); 2. Перейдіть за посиланням та завантажте svg; 3. Виберіть за допомогою миші полігон контейнера; 4. почати

після декількох ітерацій ви можете заблокувати та завантажити файл svg (див. малюнок 2)

Примітка: багатокутник і кола повинні бути в одному файлі svg

Фігура 1

цифра 2


4

Цікава проблема!

Я робив подібну річ з неправильними багатокутниками (у цьому випадку будівлі були упаковані, щоб не перекриватися)

введіть тут опис зображення

Використовуються postgresql і postgis, і python. Приблизний алгоритм був

  • Знайти випадкову точку в обмежувальному полі полігону (ST_Envelope)
  • Якщо вказуєте поза полігоном, поверніться на один крок назад
  • Складіть геометрію для дерева з центром цієї випадкової точки
  • Якщо це перекриває будь-яке існуюче розміщене дерево (ST_Overlaps), поверніться до початку
  • Додайте дерево в точку
  • Поверніться до початку

Я не можу гарантувати, що це дасть глобальний оптимум, для цього вам знадобиться алгоритм "упаковки в коло" (як уже згадували інші).

Він триватиме назавжди, тому вам потрібно буде ввести якийсь код, щоб вирішити, коли його вийти, наприклад

  • при суміщеній площі розміщених дерев - це певний відсоток площі багатокутника
  • коли для пошуку дерева, що не перекривається, потрібно більше N ітерацій.

За даними Circle Packing у Вікіпедії, найкраща щільність упаковки досягається шестикутною сіткою. Можливо, можливо створити таку сітку за допомогою MMQGIS, інтервал якої базується на розмірі ваших дерев, які я вважаю однаковими. Потім розміщуємо дерево на кожній вершині. Але тоді у вас виникає проблема знати, де розмістити сітку, щоб максимально збільшити кількість дерев.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.