Генерування плану міста в сітці


9

Я хочу створити компонування міста в квадратній сітці (відображена ізометрично, але це не має значення), використовуючи наступні елементи:

  • 2x2 Будинки
  • Дороги, 1 одиниця завширшки
  • Канали, ширина 1 одиниця

Зразок макета:

Зразковий макет

  • У мене завжди є конкретна кількість будинків, і стільки доріг і каналів, скільки потрібно, щоб з'єднати їх усіх.
  • Будинки повинні мати дві частини дороги перед вхідними дверима (що завжди вказує праворуч)
  • Було б непогано мати між собою поля трави (порожнечі).

Чи є для цього готовий алгоритм? Якщо ні, то в якому напрямку я повинен думати, щоб здійснити це?

Відповіді:


8

Існує багато способів пройти залежно від того, як саме ви цього хочете. Ось приблизний контур одного із способів, який, на мою думку, відповідає вашому опису:

Спочатку генерують канали. Тоді починайте розміщувати будинки випадковим чином, для кожного будинку, який ви розміщуєте, розташуйте дорогу перед нею та намалюйте дорогу від цього шматка до існуючої дорожньої мережі, якщо це неможливо або розміщення дороги попереду призводить до потворного блоку 2х2 переїзд будинку. Виявіть кілька дорожніх точок, які знаходяться близько один до одного, але далеко один від одного за існуючими дорогами, і спробуйте зробити деякі ярлики для них.

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

Для цього точного завдання вам, безумовно, також знадобиться добре зрозуміти базове обстеження маршруту, якщо ви вже не експерт, прочитайте тему. І пам’ятайте, що прокладання маршрутів не має стосуватися лише найкоротшого шляху, адже в останній частині мого опису ви, можливо, хочете надати деяку вагу повторному використанню шляхів, які вже є.

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

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