【问题标题】:Next iteration in z-order curvez 阶曲线中的下一次迭代
【发布时间】:2012-05-24 21:43:28
【问题描述】:

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

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

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

【问题讨论】:

  • 你到底想要什么? Z 序中与 (x, y) 相邻但没有交织和去交织的 (x', y')?
  • 完全正确,有可能吗?
  • 当然可以,但是我没有听说过(也找不到)任何技巧,所以我能想到的唯一方法是修改按位加法算法将进位添加到另一个坐标(进位in x 应该添加到 y,并且进位 y 应该添加到 x)。类似的技术可用于 3D Z 曲线。不过,这对我来说听起来并不是特别快。你对这种方式感兴趣吗?
  • 是的,我很感兴趣,听起来像很多位操作

标签: c++ bit-manipulation quadtree octree


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-07-23
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2015-10-25
    • 2014-06-30
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多