2

我正在使用这篇维基百科文章中描述的技术构建一个四叉树。我将坐标存储在 2 维或 3 维数组中。

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

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

4

1 回答 1

1

好的,这是“残缺”加法算法,x既是y输入也是输出,假设交错坐标中的最低位是(与维基百科文章x中的相同)

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

我确实测试了它,但只有一点点。

于 2012-05-27T16:43:54.667 回答