Suche nach benachbarten Nachbarn auf einem hexagonalen Gitter

8

EDIT: Wrapped die Beispielkarte in einem Codeblock, damit die Formatierung korrekt ist.

Ok, ich versuche einen extrem einfachen A * Algorithmus über ein hexagonales Gitter zu schreiben. Ich verstehe und kann den A * -Teil machen. Tatsächlich funktioniert mein A * für quadratische Gitter. Was ich nicht mit meinem Gehirn umgehen kann, ist Nachbarn mit Sechsecken zu finden. Hier ist das Layout für das heckförmige Gitter

%Vor%

etc, usw.

Ich brauche also Hilfe, um eine Hexagon-Klasse zu schreiben, die aufgrund ihrer Hex-Koordinaten eine Liste von Nachbarn erzeugen kann. Es muss in der Lage sein, Nachbarn zu erzeugen, die vom Raster fallen würden (wie 0000 oder 2101 in einem 20x20-Raster), weil meine A * -Strecken über mehrere Karten hinweg nebeneinander liegen. Also etwas, das mit diesem Code-Snippet funktionieren würde:

planet = Hex ('0214') Drucken (planet.neighbors ()) [Hex 0213, Hex 0215, Hex 0115, Hex 0315, Hex 0116, Hex 0316]

    
Jonathanb 12.07.2011, 08:06
quelle

2 Antworten

6

Es hängt davon ab, wie Sie die Koordinaten Ihrer Hex-Kacheln definieren.

Mal sehen.

%Vor%

In diesem Fall ist die Nachbardefinition für gerade und ungerade Zeilen unterschiedlich.

Für eine Zelle (X, Y), wo Y gerade ist, sind die Nachbarn: (X, Y-1), (X + 1, Y-1), (X-1, Y), (X + 1, Y), (X, Y + 1), (X + 1, Y + 1) )

Für eine Zelle (X, Y), wo Y ungerade ist, sind die Nachbarn: (X-1, Y-1), (X, Y-1), (X-1, Y), (X + 1, Y), (X-1, Y + 1), (X, Y + 1) )

    
G B 12.07.2011, 08:22
quelle
2

Nach meinem obigen Kommentar, hier ist der Code, den ich implementiert habe. Jeder mit Vorschlägen, um mir zu helfen, es aufzuräumen, ich würde das Feedback begrüßen.

%Vor%     
Jonathanb 17.07.2011 04:10
quelle

Tags und Links