Entwickler-Ecke

Algorithmen, Optimierung und Assembler - hexagonale Nachbarschaft


Maric - Mo 15.11.10 20:26
Titel: hexagonale Nachbarschaft
Ich habe ein zweidimensionales Array mit Sechsecken und will wissen, ob es einen algorithmischen Trick gibt, mit dem ich in jeder der drei Richtungen (oben-unten,rechtsoben-linksunten,linksoben-rechtsunten) die benachbarten Felder feststelle. Oben-unten ist nicht schwer, einfach y Koordinate hoch bzw runterzählen, aber in den Schrägen ist das ja mehr oder weniger abwechselnd. Wenn mir außer mit mod 2 zu Arbeiten nichts übrig bleibt reicht auch ein nein.


alzaimar - Mo 15.11.10 20:35

Numerier sie doch einfach durch und schau nach der Gesetzmäßigkeit.


Kha - Mo 15.11.10 20:45

user profile iconMaric hat folgendes geschrieben Zum zitierten Posting springen:
Wenn mir außer mit mod 2 zu Arbeiten nichts übrig bleibt reicht auch ein nein.
Besonders wenn es um Felder mit unbeschränktem Ausmaß geht, kann es eleganter sein, die "y-Achse" diagonal zu legen, aber wenn du sie schon als "senkrecht-alternierend" festgelegt hast - ja, dann hast du da quasi per definitionem ein mod 2 drin :) .


Jakob_Ullmann - Mo 15.11.10 20:51

user profile iconMaric hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe ein zweidimensionales Array mit Sechsecken und will wissen, ob es einen algorithmischen Trick gibt, mit dem ich in jeder der drei Richtungen (oben-unten,rechtsoben-linksunten,linksoben-rechtsunten) die benachbarten Felder feststelle. Oben-unten ist nicht schwer, einfach y Koordinate hoch bzw runterzählen, aber in den Schrägen ist das ja mehr oder weniger abwechselnd. Wenn mir außer mit mod 2 zu Arbeiten nichts übrig bleibt reicht auch ein nein.


Verstehe irgendwie nicht ganz das Problem. Wie sind die denn gelagert? So:


Quelltext
1:
2:
3:
. . . . .
 . . + .
. . . . .


Du willst jetzt also z. B. wissen, welche Felder an das + angrenzen??


Maric - Di 16.11.10 20:44

ja genau so

@ Post vorher wenn ich die y Achse schräg lege, bringt mich das auch nicht weiter, weil die anderen beiden immer noch im 120 Winkel davon abstehen

ich kann das noch alles umstrukturieren, wäre also kein Problem wenn es eine Struktur gäbe in der sich das leicht bestimmen lässt (objekte mit Nachbarschafts-referenzen sind mir aber doch zu aufwändig)... dann her damit


Kha - Di 16.11.10 22:03

user profile iconMaric hat folgendes geschrieben Zum zitierten Posting springen:
@ Post vorher wenn ich die y Achse schräg lege, bringt mich das auch nicht weiter, weil die anderen beiden immer noch im 120 Winkel davon abstehen
Natürlich, aber die Vektoren zu den einzelnen Nachbarn sind dann konstant und nicht mehr von der Zeile abhängig.


Martok - Di 16.11.10 22:11

Also sagen wir mal so: in meinen HexGames mache ich das so, dass ich die relativ längliche Funktion zur Berechnung der Nachbarn (naja, ein if halt was je nach Zeile unterschiedliche Richtungen geht) beim Map erstellen genau einmal aufrufe und jedem Tile eine Liste "Neighbors" gebe, die die (max. 6) Nachbarn enthält. Über die braucht man dann nur noch zu iterieren.

Hat sich bewährt...

Bei DGL [http://wiki.delphigl.com/index.php/hexfeld] gibts auch was dazu.


Mr_Emre_D - Di 16.11.10 22:55

Voila, mir war langweilig!
Ich hoffe, dies ist die Antwort auf das Problem. Bin immernoch im Ungewissen darüber, was das eigentliche Problem ist; aber wie auch immer!

MfG