有没有办法在四叉树细分中找到相邻的细胞?我指的是在任何级别上与所选单元相邻的所有单元?
答案 0 :(得分:2)
空间填充曲线填充空间并将2维减小到1维。我在phpclasses.org(希尔伯特曲线)写了一个免费的php课程。它包括z曲线,4个希尔伯特曲线和摩尔曲线以及四键函数。这是一个关于碰撞检测和四叉树的博客:lab.polygonal.de/?p = 202?
morton a.k.a.z-curve很容易构建。将x和y值转换为二进制并连接值。你可以在这里找到一些代码:http://msdn.microsoft.com/en-us/library/bb259689.aspx。您可以使用最高有效位来验证上边界。
答案 1 :(得分:0)
您需要跟踪节点所在的子节点。如果相邻节点在同一父节点中,则返回它。如果没有,你需要在树上向上走,直到你找到一个共同的祖先。然后沿着类似的路径向下,直到你回到正确的水平(或到达底部)。
Node WalkLeft(Node node)
{
if (node == null) return null;
Node leftParent;
switch (node.ChildDirection)
{
case ChildDirection.Root:
return null;
case ChildDirection.TopRight:
return node.Parent.TopLeft;
case ChildDirection.BottomRight:
return node.Parent.BottomLeft;
case ChildDirection.TopLeft:
leftParent = WalkLeft(node.Parent);
return leftParent.TopRight ?? leftParent;
case ChildDirection.BottomLeft:
leftParent = WalkLeft(node.Parent);
return leftParent.BottomLeft ?? leftParent;
}
}
同样适用于其他方向。
x ?? y
选择第一个非空值。