莫顿编码 Z 索引空间使用

Posted

技术标签:

【中文标题】莫顿编码 Z 索引空间使用【英文标题】:Morton Encoding Z-indexing Space Usage 【发布时间】:2016-02-12 06:01:36 【问题描述】:

我有点困惑,因为我测试了几种算法来计算 z 索引,对于 (8, 8, 8) 我得到 3584,对于 (7, 7, 7) 我得到 511,这是正确的。问题是 8*8*8 = 512,但是 z-index 是 3584。这意味着如果我使用一维数组按 z-index 存储东西,我不会使用更多空间并且会有空阵列中的插槽?同样 7*7*7 = 343,小于 511。如果您在***页面上查看 z-indexing/Morton 编码,您会发现一个 8*8 的二维示例,其中 x 和 y 的索引从 0到 7。但是,最大的 z-index 是 111111,即 63,从 0 开始编号时正好是第 64 个元素,因此它不会使用超过存储 64 个元素所需的空间。这里有什么问题吗?

谢谢

【问题讨论】:

【参考方案1】:

事实证明,当您进行 z 索引时,如果坐标位于 2 立方的幂的边缘,则最终索引将仅等于常规索引的索引。 (7,7,7) 的 z-index 为 511 的原始问题与 8*8*8 = 512 的事实一致。考虑到包含 0 的坐标,(7,7,7) 确实是 8 ^3 索引。 (3,3,3) 的 z-index 可以计算如下。在二进制中,(3,3,3)是(011,011,011)通过交织位,二进制中的z-index是000111111。这个十进制值是63。让我感到困惑的是3 * 3 * 3仅等于27 ,我想知道为什么我需要一个大于 27 的索引,而为 3x3x3 的立方体留下一些未使用的索引。后来我发现这就是 z-indexing 的工作原理。仅对于边长等于 2 的完美幂的立方体,每个 z-index 的坐标都为

【讨论】:

以上是关于莫顿编码 Z 索引空间使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在范围搜索中使用莫顿阶(z阶曲线)?

如何将纬度和经度转换为莫顿码(z 阶曲线)

非立方区域的莫顿曲线,是 2 的幂

使用空间填充曲线的空间和时空索引

2D morton 代码编码/解码 64 位

使用 Morton 顺序进行最近邻搜索的好处?