Morton 编码 Z 索引 Space 用法

Morton Encoding Z-indexing Space Usage

我有点困惑,因为我已经测试了几种计算 z 索引的算法,对于 (8, 8, 8) 我得到 3584,对于 (7, 7, 7) 我得到 511,这是正确的.问题是 8*8*8 = 512,但 z-index 是 3584。这意味着如果我使用一维数组按 z-index 存储东西,我不会使用更多 space 和数组中会有空槽吗?类似地,7*7*7 = 343,小于 511。如果您在维基百科页面上查看 z-indexing/Morton 编码,您会发现一个二维示例,它是 8*8,x 和 y 的索引从 0到7。但是,最大的z-index是111111,也就是63,从0开始编号,恰好是第64个元素,所以存储64个元素时,它不会使用更多的space。这里有什么问题吗?

谢谢

事实证明,当您使用 z 索引时,如果坐标位于二次方的边缘,则最终索引只会等于常规索引的索引。 z-index 为 511 的 (7,7,7) 的原始问题与 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 的坐标都是 <= (x,y,z)