Dzięki temu postowi : Sześciokątne płytki i znajdowanie sąsiadujących z nimi sąsiadów , jestem w stanie zebrać sąsiednie płytki do danej płytki. Ale prawie utknąłem na algorytmie, który daje mi tylko „pierścień” płytek określonych przez przesunięcie. Algorytm podany w tym artykule Przepełnienie stosu nie dba dokładnie o kolejność, w jakiej zbiera kafelki.
Wiem, że z każdym przesunięciem dodaje się 6 płytek.
- Przesunięcie 1 daje 6 płytek (pierwsze sąsiadujące płytki).
- Offset 2 daje 12.
- Offset 3 daje 18 itd.
Z każdym przesunięciem następuje stały wzrost o 6. Zakładam więc, że powinna istnieć reguła, która dostosowuje się do tych przesunięć. Nie mogę tego dokładnie rozgryźć. Ktoś?
źródło
Uważam, że ten artykuł stanowi bardzo dobre odniesienie do algorytmów siatki heksagonalnej, a jego sekcja „Odległości” zapewnia metodę określania liczby kroków między dwoma kafelkami. W przypadku konwersji współrzędnych osiowych (x-y) into cube coordinates (x-y-z), the distance is always equal to the largest of the coordinate offsets between the two tiles, or max(|dx|, |dy|, |dz|).
Wyczerpujące przeszukanie całej siatki pod kątem płytek w żądanej odległości toO ( n2)) z wymiarami siatki, ale jest to prosta implementacja, która działa dobrze w przypadku małych siatek.
źródło