Saya baru saja memposting perpustakaan utilisasi hex-grid di CodePlex.com di sini:
https://hexgridutilities.codeplex.com/
Perpustakaan mencakup path-finding (menggunakan A- * a la Eric Lippert) dan menyertakan utiliti untuk konversi otomatis antara koordinat jagged (disebut Pengguna) dan koordinat non-jagged (disebut Canonical). Algoritma path-findingn memungkinkan biaya langkah untuk setiap node bervariasi baik dengan entri hex dan te dilalui hex-side (meskipun contoh yang diberikan lebih sederhana). Juga, bidang pandang yang ditingkatkan menggunakan pengecoran bayangan disediakan, [edit: kata-kata dihapus].
Berikut adalah contoh kode yang dapat dikonversi dengan mudah antara tiga sistem koordinat hex-grid:
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 dan IntVector2D adalah [sunting: homogen] implementasi integer dari affine2D Graphics Vector and Matrix. Pembagian akhir oleh 2 pada aplikasi vektor adalah untuk menormalkan kembali vektor; ini bisa dikubur dalam implementasi IntMatrix2D, tetapi kemudian alasan argumen ke-7 ke konstruktor IntMatrix2D kurang jelas. Perhatikan caching gabungan dan evaluasi malas dari formulasi tidak terkini.
Matriks ini untuk kasus ini:
- Hex butir vertikal;
- Asal di kiri atas untuk koordinat Canonical & User, kiri bawah untuk Koordinat kustom;
- Sumbu Y vertikal ke bawah;
- Sumbu X persegi panjang melintang secara horizontal; dan
- Sumbu X Canonical ke Utara-Timur (yaitu ke atas dan ke kanan, pada 120 derajat CCW dari sumbu Y).
Pustaka kode yang disebutkan di atas menyediakan mekanisme elegan yang sama untuk pengambilan hex (yaitu mengidentifikasi hex yang dipilih dengan klik mouse).
Dalam koordinat Canonical, 6 vektor arah-kardinal adalah (1,0), (0,1), (1,1) dan terbalik mereka untuk semua segi enam, tanpa asimetri dari coordintes bergerigi.