我正在使用this wikipedia article中描述的技术构建四叉树。 我将坐标存储在2或3维数组中。
boost::array<unsigned int, 2 /* 3 */> coord;
我需要一种方法来计算z顺序中下一个框的坐标。 它可以通过交错比特,增加1而不是去交错来工作,但这变得非常复杂。 我希望在没有交错位的文章中有一个类似于cmp_zorder(...)方法的实现。
答案 0 :(得分:1)
好的,这是“残缺的”加法算法,x
和y
是输入和输出,并假设交错坐标中的最低位为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);
我测试了它,但只是一点点。