首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QuadTree中的相邻单元格

QuadTree中的相邻单元格
EN

Stack Overflow用户
提问于 2012-05-25 22:10:14
回答 2查看 2.2K关注 0票数 1

有没有办法在四叉树细分中找到相邻的单元?我的意思是在任何级别上与所选单元格相邻的所有单元格?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-25 22:19:29

一个空间填充曲线完全填充一个空间,并将2维减少到1维。我在phpclasses.org (希尔伯特曲线)写了一个免费的php类。它包括一条z曲线,4条希尔伯特曲线,摩尔曲线和一个四键函数。这里有一个关于碰撞检测和四叉树的博客: lab.polygonal.de/?p=202?

一个叫莫顿的人。Z曲线很容易构造。将x和y值转换为二进制,并将这些值连接起来。你可以在这里找到一些代码:http://msdn.microsoft.com/en-us/library/bb259689.aspx。您可以使用最高有效位来验证上限。

票数 2
EN

Stack Overflow用户

发布于 2012-05-25 22:13:54

您需要跟踪节点是哪个子节点。如果相邻节点在同一父节点中,只需返回它即可。如果不是,你需要在树中向上移动,直到你找到一个共同的祖先。然后沿着类似的路径往下走,直到你回到正确的水平(或到达底部)。

代码语言:javascript
复制
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选取第一个非空值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10755913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档