z 阶曲线中的下一次迭代

Next iteration in z-order curve

本文关键字:一次 迭代 曲线      更新时间:2023-10-16

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

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

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

好的,

这里是"残缺"加法算法,xy是输入和输出,假设交错坐标中的最低阶位将是x(与维基百科文章中相同)

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

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