Kare veya altıgen ızgaralar yol bulma için daha mı iyidir?


17

Bir yol bulma algoritması tarafından aranan alan için kare veya altıgen bir ızgara kullanmak arasında önemli bir fark var mıdır. Başka bir deyişle, kare veya altıgen daha iyidir ve eğer öyleyse neden.


4
Methinks, oyununuza uygun olanı kullanmalısınız;)
Andrew Russell

Yanıtlar:


19

Kare vs altıgen ızgaraları kullanıp kullanmayacağınıza karar vermek için ana düşünce AI uygulamasının kolaylığı olmamalıdır - genişlik ilk ve derinlik ilk arama algoritmaları, ne tür bir grafiğiniz olursa olsun hemen hemen aynıdır.

Aksine, bu oyun tasarımcıları tarafından düşünülmesi gereken bir oyun sorunudur. Kare ızgaralar kitle pazarı için daha erişilebilir (altıgen tahtalar "inek" görünme eğilimindedir) ve yukarı / aşağı / sol / sağ kontroller dünyasında, bir UI açısından altıgenlerden daha kareler arasında gezinmek çok daha sezgiseldir. Kare ızgaralar da hareketi biraz daha kısıtlama eğilimindedir; dikey hareket varsayarsak (köşegen değil), altıgen bir ızgaradaki 3 hareketle karşılaştırıldığında, bir kare engelin etrafında yürümek 4 hareket gerektirir. Bir programlama açısından, altıgenlerin uygulanması da biraz daha kolaydır, ancak bir kare ızgara iki boyutlu bir diziye eşit olduğu kadar arama algoritmaları ile ilgili değildir, ancak bir altıgen ızgara gerçekten standart bir veri yapısıyla eşleşmez.

Kare ızgaraların aşağı tarafı, hareketin asla doğru hissetmemesidir. Çapraz olarak hareket etmek, sqrt (2) hareket noktalarını almalıdır, ancak pratikte ya 1 harekettir (bu, diyagonallerde yürümek gibi hissettirir hızlıdır ve nadiren ortogonal olarak yürümenin bir nedeni vardır) veya 2 hareketidir (bu, çapraz hareketi çok yavaş hissettirir) ). Onaltılık ızgaralarda hareket mesafesi çok daha sezgiseldir, çünkü hangi yolu seçerseniz seçin her zaman bir altıgenden diğerine aynı mesafe.


4
+1. Bu bir AI kararı değil, bir tasarım kararıdır. Altıgen ızgaralar istiyorsanız, www-cs-students.stanford.edu/~amitp/game-programming/grids/… gibi bir ofset-kare ızgara sıradan oyunculara daha az korkutucu olabilir ve matematiksel olarak altıgenlere eşdeğerdir. Ayrıca, uygun bir bellek içi gösterim de.

2
Cümle için +1 "Kare ızgaralar kitle pazarı için daha erişilebilir (altıgen panoları"
inek

Edwin, grid tabanlı bir oyunda neyin daha iyi olduğunu sormuyor. AI'nın kare veya altıgen kullanması için neyin daha iyi olduğunu soruyor. Dünya ve oyunun kendisi bunlarla sınırlı olmak zorunda değil, sadece AI'nın hangi düğümleri aradığını.
AttackingHobo

Hem altıgen hem de kare ızgaralarla sıra tabanlı strateji oyunları uyguladım ve yol bulma karmaşıklığı açısından kesinlikle gerekli bir fark yok. Hatta bir oyunu onaltılık bir haritadan kare bir haritaya değiştirdim ve (oluşturma dışında) tek yapmam gereken iki sektör arasındaki mesafeyi hesaplayan bir MapLocation :: GetDistance () yöntemiydi. Sadece diğer satırların biraz dengelenmesi için hesaplamaları ayarlamak zorunda kaldım. Her iki durumda da, aynı bellek içi gösterimini kullanabilirsiniz. Yani, diğerlerinin söylediği gibi, bu gerçekten bir tasarım sorunu.
Mike Strobel

4
Sadece bir yana, altıgenler 2 boyutlu bir diziye eşlenebilir. Kare bir ızgara çizin, ardından her çift sütunu yarım adım aşağı kaydırın. Şu anda bir onaltılık ızgaraya izomorfik olan ofset kare bir ızgara var.
Asmor

3

Hiçbir şekilde bir AI uzmanı değilim, ancak fark göz ardı edilebilir olmalıdır. Kare ızgaralar biraz daha hızlıdır (6 yerine düğüm başına 4 bağlantı), ancak bu gerçekten algoritmik çalışma süresinde sınırlayıcı faktör değildir. Hangi algoritmayı kullanmayı planladığınıza bağlı olarak, kod bir onaltılık ızgara için biraz daha karmaşık olabilir, çünkü koordinatları hesaplamak biraz daha karmaşıktır ve inandığım dörtlü / oktree kısayollarını kullanmak daha zordur genellikle yol bulmada kullanılır.

Ancak sıra tabanlı strateji oyun seviyesi gibi basit bir dünya için iki düzen arasındaki farkın çok önemli olmaması gerekir; bir kare ızgara biraz daha basit ve daha hızlı olacaktır.


5
"Kare ızgaralar biraz daha hızlı (6 yerine düğüm başına 4 bağlantı)" - çaprazlar boyunca seyahat edemezseniz, bu durumda 8 bağlantı 6'ya karşılık gelir.
Ian Schreiber

Touché. Tamamen haklısın; elbette diyagonal bağlantılar muhtemeldir.
Gregory Avery-Weir

3

Yol planlama konusunda düşünebileceğim bir pratik fark var. Bir altıgen hücrenin merkezinden komşularının üzerine gitmek her zaman aynı mesafedir, eğer çapraz bir harekete izin verirseniz, bu kareler için geçerli değildir.


0

Altıgenler hakkındaki bu rehber harika. Yol bulma ile ilgili bölüm etkileşimli bir örneğe ve kare yol bulmanın nasıl uyarlanacağına dair bazı bilgiler içerir.

A * veya Dijkstra algoritması veya Floyd-Warshall gibi grafik tabanlı yol bulma kullanıyorsanız, onaltılık ızgaralarda yol bulma, kare ızgaralardaki yol bulmadan farklı değildir.

  • Komşular. Ben yol bulma öğretici sağlamak örnek kod bir konumun komşuları almak için graph.neighbors çağırır. Bunun için komşular bölümündeki işlevi kullanın. Geçilemez olan komşuları filtreleyin.
  • Sezgisel. A * için örnek kod, iki konum arasında mesafe veren sezgisel bir işlev kullanır. Hareket maliyetlerine uyacak şekilde ölçeklendirilmiş mesafe formülünü kullanın. Örneğin, hareket maliyetiniz altıgen başına 5 ise, mesafeyi 5 ile çarpın.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.