English 中文(简体)
QuadTree 中的相邻单元格
原标题:Adjacent cells in QuadTree

有没有办法在四叶分区找到相邻的细胞?

最佳回答

空间填充曲线填满了空间填充, 并将2维度减为1维。 我在phpclasses. org (hilbert curve) 写了免费的php类。 它包括一个 z 曲线、 4 Hhilbert curps、 4 moore 曲线和一个四重函数 。 以下是关于碰撞探测和四重树的博客: Lab.polygonal.de/? p= 202?

""https://i.sstatic.net/mowvW.jpg" alt="在这里输入图像描述"/ >

momonton a.k.a.z-curve 很容易构建。 将 x 和 y 值转换为二进制和组合值。 您可以在这里找到一些代码 。 您可以在此找到一些代码 : < a href="http://msdn. microsoft. com/ en- us/library/bb259689. aspx" rel= “ nofollow noreferrer" > > http://msdn. microsoft. com/ en-us/library/b259689. aspx < /a > 。 您可以使用最重要的部分来验证上方边界 。

问题回答

您需要跟踪哪个孩子的节点。 如果相邻的节点位于同一个父系, 请返回它。 否则, 您需要在树上行走, 直到找到共同的祖先。 然后沿着类似的路径向下走, 直到您回到正确的水平( 或到达底部 ) 。

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 选择第一个非核值。





相关问题
How to add/merge several Big O s into one

If I have an algorithm which is comprised of (let s say) three sub-algorithms, all with different O() characteristics, e.g.: algorithm A: O(n) algorithm B: O(log(n)) algorithm C: O(n log(n)) How do ...

Grokking Timsort

There s a (relatively) new sort on the block called Timsort. It s been used as Python s list.sort, and is now going to be the new Array.sort in Java 7. There s some documentation and a tiny Wikipedia ...

Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Enumerating All Minimal Directed Cycles Of A Directed Graph

I have a directed graph and my problem is to enumerate all the minimal (cycles that cannot be constructed as the union of other cycles) directed cycles of this graph. This is different from what the ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签