Właśnie zamieściłem bibliotekę narzędzi hex-grid na CodePlex.com tutaj:
https://hexgridutilities.codeplex.com/
Biblioteka zawiera wyszukiwanie ścieżek (przy użyciu A- * a la Eric Lippert) i zawiera narzędzia do automatycznej konwersji między postrzępione (zwane użytkownikiem) kordinaty i współrzędne nie strzępione (zwane kanonicznymi). Algorytm znajdowania ścieżki pozwala, aby koszt kroku dla każdego węzła zmieniał się zarówno w polu szesnastkowym wejściowym, jak i po stronie szesnastkowej (chociaż podany przykład jest prostszy). Zapewniono także podwyższone pole widzenia za pomocą rzutowania w tle, [edycja: słowa usunięte].
Oto przykładowy kod, który łatwo konwertuje między trzema układami współrzędnych sześciokątnych:
static readonly IntMatrix2D MatrixUserToCanon = new IntMatrix2D(2,1, 0,2, 0,0, 2);
IntVector2D VectorCanon {
get { return !isCanonNull ? vectorCanon : VectorUser * MatrixUserToCanon / 2; }
set { vectorCanon = value; isUserNull = isCustomNull = true; }
} IntVector2D vectorCanon;
bool isCanonNull;
static readonly IntMatrix2D MatrixCanonToUser = new IntMatrix2D(2,-1, 0,2, 0,1, 2);
IntVector2D VectorUser {
get { return !isUserNull ? vectorUser
: !isCanonNull ? VectorCanon * MatrixCanonToUser / 2
: VectorCustom * MatrixCustomToUser / 2; }
set { vectorUser = value; isCustomNull = isCanonNull = true; }
} IntVector2D vectorUser;
bool isUserNull;
static IntMatrix2D MatrixCustomToUser = new IntMatrix2D(2,0, 0,-2, 0,(2*Height)-1, 2);
static IntMatrix2D MatrixUserToCustom = new IntMatrix2D(2,0, 0,-2, 0,(2*Height)-1, 2);
IntVector2D VectorCustom {
get { return !isCustomNull ? vectorCustom : VectorUser * MatrixUserToCustom / 2; }
set { vectorCustom = value; isCanonNull = isUserNull = true; }
} IntVector2D vectorCustom;
bool isCustomNull;
IntMatrix2D i IntVector2D to [edytuj: jednorodne] implementacje liczb całkowitych Affine2D Graphics Vector i Matrix. Ostateczny podział przez 2 w zastosowaniach wektorowych polega na ponownej normalizacji wektorów; może to być zakopane w implementacji IntMatrix2D, ale powód 7. argumentu dla konstruktorów IntMatrix2D jest mniej oczywisty. Zwróć uwagę na połączone buforowanie i leniwą ocenę preparatów długoterminowych.
Te macierze dotyczą przypadku:
- Ziarno sześciokątne pionowe;
- Pochodzenie w lewym górnym rogu dla współrzędnych kanonicznych i użytkownika, w lewym dolnym rogu dla współrzędnych niestandardowych;
- Oś Y pionowo w dół;
- Prostokątna oś X poziomo w poprzek; i
- Kanoniczna oś X w kierunku północno-wschodnim (tj. W górę i w prawo, w 120 stopniach w lewo od osi Y).
Wspomniana wyżej biblioteka kodów zapewnia podobnie elegancki mechanizm wybierania heksadecymalnego (tj. Identyfikowanie heksa wybranego kliknięciem myszy).
We współrzędnych kanonicznych 6 głównych wektorów kierunkowych to (1,0), (0,1), (1,1) i ich odwrotności dla wszystkich sześciokątów, bez asymetrii poszarpanych współrzędnych.