z顺序曲线的下一次迭代

时间:2012-05-24 21:43:28

标签: c++ bit-manipulation quadtree octree

我正在使用this wikipedia article中描述的技术构建四叉树。 我将坐标存储在2或3维数组中。

boost::array<unsigned int, 2 /* 3 */> coord;

我需要一种方法来计算z顺序中下一个框的坐标。 它可以通过交错比特,增加1而不是去交错来工作,但这变得非常复杂。 我希望在没有交错位的文章中有一个类似于cmp_zorder(...)方法的实现。

1 个答案:

答案 0 :(得分:1)

好的,这是“残缺的”加法算法,xy是输入和输出,并假设交错坐标中的最低位为x (与the wikipedia article中的相同)

int carry = 1;
do
{
    int newcarry = x & carry;
    x ^= carry;
    carry = newcarry;
    newcarry = (y & carry) << 1;
    y ^= carry;
    carry = newcarry;
} while (carry != 0);

我测试了它,但只是一点点。