我正在使用这篇维基百科文章中描述的技术构建一个四叉树。我将坐标存储在 2 维或 3 维数组中。
boost::array<unsigned int, 2 /* 3 */> coord;
我需要一种方法来计算 z 顺序中下一个框的坐标。它可以通过交错位来工作,增加一而不是去交错,但这会变得非常复杂。我希望有一个类似于文章中 cmp_zorder(...) 方法的实现,它可以在不交错位的情况下工作。
我正在使用这篇维基百科文章中描述的技术构建一个四叉树。我将坐标存储在 2 维或 3 维数组中。
boost::array<unsigned int, 2 /* 3 */> coord;
我需要一种方法来计算 z 顺序中下一个框的坐标。它可以通过交错位来工作,增加一而不是去交错,但这会变得非常复杂。我希望有一个类似于文章中 cmp_zorder(...) 方法的实现,它可以在不交错位的情况下工作。
好的,这是“残缺”加法算法,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);
我确实测试了它,但只有一点点。