【问题标题】:Z-Index with out of bound restrictionsZ-Index 有越界限制
【发布时间】:2017-01-30 18:23:43
【问题描述】:

我需要从平面上的点的 2 个坐标 x,y 计算 Z-Index (Morton)。

传统上这只是通过比特交错来解决。

但是我有边界,我希望该点的 z-index 仅在其处于活动区域内时增加 morton 计数,而在外部时跳过计数。

需要明确的是,4x4 正方形中的典型 z 顺序是:

|  0  1  4  5 |
|  2  3  6  7 |
|  8  9 12 13 |
| 10 11 14 15 |

但是,如果我有一个 3x3 的活动区域,我希望这样计算索引:

|  0  1  4  x |
|  2  3  5  x |
|  6  7  8  x |
|  x  x  x  x |

您可以看到 00-11 四边形已满,02-13 正在跳过活动区域之外的 2 个点的计数,对于 20-31 和 22-33 也是如此。

重要提示:我想在不迭代的情况下执行此操作。

这个问题有已知的解决方案吗?

【问题讨论】:

  • 你能找到解决办法吗?
  • 不,对不起......
  • 我在该页面上看不到我的问题的答案。我知道如何进行位转换以从 x 和 y 获取 z-index,反之亦然。我不知道如何在矩形阵列上做到这一点。该页面的答案在哪里?

标签: z-order-curve


【解决方案1】:

我能够在https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/上得到问题的答案

要处理矩形区域,请将所有尺寸四舍五入到最接近的 2 次幂,然后线性压缩长轴。

例如,5x4矩形中的结束编码点(2,3)如下,

将 5x4 向上舍入到最接近的 2 次方得到 8x4,即 3 位和 2 位

编码点 2,3 首先交错 0b010 的 2bits,0b11 得到 0b1110,x 维度的第 3 位成为结果的第 5 位。

编码 4,2, 0b100, 0b11 变成 0b11010

为了找到 3x3 区域的 z 顺序,使用上述方法的上述逆向找到 4x4 区域的逆映射 在生成地图时跳过任何落在 3x3 区域之外的点。

映射看起来像

(0,0) -> (0,0)
(0,1) -> (1,0)
(0,2) -> (0,1)
(0,3) -> (1,1)
(1,0) -> (2,0)
(1,2) -> (2,1)
(2,0) -> (0,2)
(2,1) -> (1,2)
(3,0) -> (2,2)

python代码可能有用,https://gist.github.com/kannaiah/4eb936b047a987b32555b2642a0979f7

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多