방금 CodePlex.com에 16 진수 그리드 유틸리티 라이브러리를 게시했습니다 :
https://hexgridutilities.codeplex.com/
라이브러리에는 경로 찾기 (A * a la Eric Lippert 사용)와 자동 변환을위한 유틸리티가 포함되어 있습니다 들쭉날쭉 한 (사용자라고 함) 좌표 및 들쭉날쭉하지 않은 (정식) 좌표. path-findingn 알고리즘을 사용하면 각 노드의 단계 비용이 16 진 입력 및 6 진 6 진 측에 따라 다를 수 있습니다 (제공된 예제는 더 단순하지만). 또한 섀도우 캐스팅을 사용한 향상된 FOV (Field of Field)가 제공됩니다 [편집 : 단어 제거].
다음은 3 개의 16 진-그리드 좌표계 사이를 쉽게 변환하는 코드 샘플입니다.
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 및 IntVector2D는 affine2D Graphics Vector 및 Matrix의 [edit : homogeneous] 정수 구현입니다. 벡터 응용 프로그램에서 2 로의 마지막 나누기는 벡터를 다시 정규화하는 것입니다. 이것은 IntMatrix2D 구현에 묻힐 수 있지만 IntMatrix2D 생성자에 대한 일곱 번째 인수의 이유는 분명하지 않습니다. 비전 류 제형의 캐싱 및 지연 평가의 결합에 주목하십시오.
이 행렬은 다음과 같습니다.
- 육각 곡물 수직;
- 표준 좌표 및 사용자 좌표의 경우 왼쪽 위 원점, 사용자 지정 좌표의 경우 왼쪽 아래 원점;
- Y 축 수직 아래로;
- 가로로 가로 질러 직사각형 X 축; 과
- 북동쪽으로의 정식 X 축 (예 : Y 축에서 120도 CCW).
위에서 언급 한 코드 라이브러리는 16 진 선택 (마우스 클릭으로 선택한 16 진 식별)에 대해 유사하게 우아한 메커니즘을 제공합니다.
정규 좌표에서 6 개의 기본 방향 벡터는 들쭉날쭉 한 좌표의 비대칭없이 (1,0), (0,1), (1,1) 및 모든 육각형에 대한 역수입니다.