我刚刚在CodePlex.com上发布了一个十六进制网格实用程序库,网址为:https ://hexgridutilities.codeplex.com/
该库包含路径查找(使用A- * la Eric Lippert),并且包括用于在两个程序之间进行自动转换的实用程序锯齿(称为用户)坐标和非锯齿(称为规范)坐标。路径查找算法允许每个节点的步长成本随入口十六进制和遍历十六进制侧的不同而变化(尽管提供的示例更简单)。此外,还提供了使用阴影投射的高视野,[编辑:已删除单词]。
这是一个可以在三个十六进制网格坐标系统之间轻松转换的代码示例:
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图形向量和矩阵的[整数]整数实现。向量应用程序上的最后除以2是重新标准化向量。可以将其埋在IntMatrix2D实现中,但是对于IntMatrix2D构造函数使用第7个参数的原因并不那么明显。注意非当前配方的组合缓存和延迟评估。
这些矩阵是的情况下:
- 六角纹垂直;
- 标准坐标和用户坐标的左上角原点,自定义坐标的左下角;
- Y轴垂直向下;
- 水平矩形X轴;和
- 东北的标准X轴(即,与Y轴成逆时针方向120度)。
代码库上述提供了一种类似的优雅机制己拾取(即识别用鼠标点击选择的十六进制)。
在规范坐标中,6个基本方向矢量分别是(1,0),(0,1),(1,1)及其所有六边形的逆,而没有锯齿状坐标的不对称性。