Як можна створити навігаційну сітку для сітки плитки?


18

Я ще не почав програмувати цю програму, але хотів побачити, як мені все-таки робити це.

Скажімо, у мене є сітка плитки, всі однакового розміру, деякі проходять, а деякі ні. Як би я міг створити навігаційну сітку багатокутників з цієї сітки?

Моя ідея полягала в тому, щоб вийняти непрохідні плитки і продовжити лінії звідти країв, щоб зробити багатокутники ... це все, що я маю досі. Будь-яка порада?


2
Технічно сітка майже рівнозначна навігаційній сітці. Я підозрюю, що ви насправді просите спосіб оптимізувати сітку та з’єднати сусідні квадрати.
Кілотан

@Kylotan Так, це саме те, що я мав на увазі, просто спосіб поєднати сусідні багатокутники.
Росс Хейс

Відповіді:


28

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

  1. Використовуйте алгоритм маркування квадратів для перетворення плитки перешкод у контури . Зауважте, що краї карт також є контурами і їх також потрібно включити.
  2. Зменшити кількість точок у контурах за допомогою алгоритму Дугласа-Пейкера (фіолетові лінії на нижньому малюнку)
  3. Годувати всі крапки в Делоне тріангуляцію (щоб отримати найбільш однорідні трикутники)
  4. Додайте додаткові точки в порожніх місцях та по краях карти (щоб отримати більш рівний навмеш)
  5. Перевірте контури перешкод і переверніть багатокутники, вироблені Делоне, щоб відповідати обрисам. - Часто Делоне може розміщувати трикутники (сірий), невідповідні вашим обрисам (червоний), тоді вам потрібно виявити та перевернути їх. Приєднавши їх назад до багатокутника, розділіть його по контурах і триангулюйте вручну введіть тут опис зображення
  6. Внутрішні кліпи перешкод - видаліть багатокутники, що знаходяться в межах перешкод (рожевий на малюнку вище)
  7. Заповніть дані про зв’язок між рештою трикутниками та вершинами, як вам потрібно - ось ваш навмеш.

Результат:

натяжна карта


1

Мережі зазвичай реалізуються у вигляді графіків. Якщо ви хочете реалізувати пошук шляху на карті на основі сітки, зробіть наступне:

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


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

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