Tôi vừa đăng một thư viện sử dụng lưới hex trên CodePlex.com tại đây:
https://hexgridutilities.codeplex.com/
Thư viện bao gồm tìm đường dẫn (sử dụng A- * a la Eric Lippert) và bao gồm các sử dụng để chuyển đổi tự động giữa răng cưa (người dùng được gọi là thuật ngữ) và tọa độ không bị lởm chởm (được gọi là Canonical). Thuật toán tìm đường dẫn cho phép chi phí bước cho mỗi nút thay đổi cả với hex hex nhập và te đi qua phía hex (mặc dù ví dụ được cung cấp đơn giản hơn). Ngoài ra, chế độ xem trường nâng cao bằng cách sử dụng đổ bóng được cung cấp, [sửa: xóa từ].
Đây là một mẫu mã có thể chuyển đổi dễ dàng giữa ba hệ tọa độ lưới hex:
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 và IntVector2D là [chỉnh sửa: đồng nhất] triển khai số nguyên của Vector và ma trận đồ họa affine2D. Sự phân chia cuối cùng cho 2 trên các ứng dụng vectơ là để chuẩn hóa lại các vectơ; điều này có thể bị chôn vùi trong quá trình triển khai IntMatrix2D, nhưng sau đó lý do cho đối số thứ 7 đối với các hàm tạo của IntMatrix2D là ít rõ ràng hơn. Lưu ý kết hợp bộ nhớ đệm và đánh giá lười biếng của các công thức không hiện hành.
Các ma trận này là dành cho trường hợp:
- Hạt lục giác thẳng đứng;
- Xuất xứ ở phía trên bên trái cho tọa độ Canonical & Người dùng, phía dưới bên trái cho các tọa độ Tùy chỉnh;
- Trục Y thẳng đứng xuống;
- Trục X hình chữ nhật nằm ngang; và
- Trục X Canonical về phía Đông Bắc (tức là lên và sang phải, ở 120 độ CCW từ trục Y).
Thư viện mã được đề cập ở trên cung cấp một cơ chế thanh lịch tương tự để chọn hex (tức là xác định hex được chọn bằng một cú nhấp chuột).
Trong tọa độ Canonical, 6 vectơ định hướng chính là (1,0), (0,1), (1,1) và nghịch đảo của chúng cho tất cả các hình lục giác, không có sự đối xứng của các tọa độ răng cưa.