Чи квадратичні або шестигранні сітки кращі для проходження маршруту?


17

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


4
Придумайте, що ви повинні використовувати все, що підходить для вашого геймплея;)
Ендрю Рассел

Відповіді:


19

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

Скоріше, це питання геймплея, яке слід розглянути ігровим дизайнерам. Квадратні сітки є більш доступними для масового ринку (шестигранні дошки, як правило, виглядають "видовищними"), і в світі елементів управління вгору / вниз / вліво / вправо набагато інтуїтивніше орієнтуватися по квадратах, ніж шестигранні з точки зору користувальницького інтерфейсу. Квадратні сітки також, як правило, трохи більше обмежують рух; припускаючи ортогональний рух (а не діагональний), потрібно пройти 4 ходи навколо одноквадратної перешкоди, порівняно з 3-ма ходами в шестигранній сітці. З точки зору програмування, шестигранники також трохи легше реалізувати, але мова йде не про алгоритми пошуку, а про те, що квадратна сітка дорівнює двовимірному масиву, але шестигранна сітка насправді не відповідає стандартній структурі даних.

Нижня сторона квадратних сіток полягає в тому, що рух ніколи не відчуває себе правильним. Переміщення по діагоналі повинно приймати точки руху sqrt (2), але на практиці це або 1 рух (що дає змогу ходити по діагоналях швидко, і рідко є причина ходити ортогонально), або це 2 руху (завдяки чому діагональний рух відчувається занадто повільним ). За допомогою шестигранних сіток відстань руху набагато інтуїтивніше, оскільки це завжди однакова відстань від одного шестигранника до іншого, незалежно від того, яким шляхом ви проходите.


4
+1. Це проектне рішення, а не рішення про ІС. Якщо ви хочете отримати шестикутну сітку, сітка з площиною зміщення, як-от www-cs-students.stanford.edu/~amitp/game-programming/grids/…, може бути менш заляканою для випадкових гравців, і це математично еквівалентно шестикутникам. Крім того, це зручне представлення пам'яті.

2
+1 для речення "Квадратні сітки доступні для масового ринку (шестигранні дошки, як правило, виглядають" видовищними ")": D
Kornel Kisielewicz

Едвін не запитує, що краще в грі на основі гри. Він запитує, що краще для ШІ використовувати квадратні або шестикутники. Світ і сам геймплей не повинні обмежуватися лише тими, які саме вузли шукають AI.
AttackingHobo

Я реалізував покрокові стратегічні ігри як з шестигранною, так і з квадратною сітками, і немає абсолютно ніякої необхідної різниці в плані складності маршрутизації. Я навіть переключив одну гру з шестигранної на квадратну карту, і (крім рендерінга), єдиною зміною, яку я повинен був зробити, був метод MapLocation :: GetDistance (), який обчислював відстань між двома секторами. Мені просто довелося коригувати обчислення, щоб мати справу з тим, щоб кожен другий ряд був трохи зміщений. В обох випадках ви можете використовувати одне і те ж представлення в пам'яті. Отже, як говорили інші, це справді проблема дизайну.
Mike Strobel

4
Лише вбік, шестикутники можна відобразити у двовимірному масиві. Зобразіть квадратну сітку, а потім змістіть кожен рівний стовпчик на півкроку вниз. Зараз у вас зрушена квадратна сітка, яка є ізоморфною для шестигранної сітки.
Асмор

3

Я жодним чином не є експертом з ІІ, але різниця повинна бути незначною. Квадратні сітки трохи швидші (4 підключення на вузол замість 6), але це насправді не є обмежуючим фактором в алгоритмічному режимі виконання. Залежно від того, який алгоритм ви плануєте використовувати, код може бути дещо складнішим для шістнадцяткової сітки, оскільки обчислити координати трохи складніше, і складніше використовувати такі ярлики квадратури / октри, які, на мою думку, є часто використовується в обробці доріжок.

Але для простого світу, такого як рівень покрокової стратегії гри, різниця між двома макетами не повинна мати великого значення; квадратна сітка буде трохи простішою та швидшою.


5
"Квадратні сітки трохи швидші (4 підключення на вузол замість 6)" - якщо тільки ви не зможете подорожувати по діагоналях. У цьому випадку це 8 з'єднань проти 6.
Ian Schreiber

Туш. Ви абсолютно праві; звичайно, діагональні з'єднання будуть ймовірними.
Григорій Ейвері-Вейр

3

Є одна практична відмінність, яку я можу придумати щодо планування шляху. Проїзд від центру шестигранної комірки до сусідів - це завжди однакова відстань, тоді як, якщо ви дозволяєте проходити по діагоналі, це не стосується квадратів.


0

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

Якщо ви використовуєте графік на основі графіків, такий як алгоритм A * або Dijkstra або Floyd-Warshall, накладання маршрутів на шестигранних сітках не відрізняється від накладання маршрутів на квадратних сітках.

  • Сусіди. Зразок коду, який я надаю в навчальному посібнику для проходження маршрутів, викликає graph.neighbors, щоб отримати сусідів місця. Використовуйте для цього функцію в розділі сусідів. Відфільтруйте сусідів, які є непрохідними.
  • Евристичний. Зразок коду для A * використовує евристичну функцію, яка дає відстань між двома місцями. Використовуйте формулу відстані, масштабовану, щоб відповідати витратам на рух. Наприклад, якщо ваша вартість руху становить 5 за шістнадцятку, то помножте відстань на 5.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.