我有点困惑,因为我测试了几个算法来计算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开始但是,最大的z-index是111111,它是63,当从0开始编号时恰好是第64个元素,因此它不会占用超过存储64个元素所需的空间。这里有什么问题吗?
由于
答案 0 :(得分:1)
事实证明,当你有z-indexing时,如果坐标位于2个立方体幂的边缘,则最终索引将仅等于常规索引的索引。 z-index为511的原始问题(7,7,7)与8 * 8 * 8 = 512的事实一致。考虑到包含0的坐标,(7,7,7)确实是8 ^ 3索引。 (3,3,3)的z指数可以如下计算。在二进制中,(3,3,3)是(011,011,011)通过交织这些位,二进制的z-index是000111111.这个十进制值是63.让我困惑的是3 * 3 * 3只等于27 ,我想知道为什么我需要一个大于27的索引,留下一些索引未使用3x3x3的立方体。后来我发现这就是z-indexing的工作原理。只有边长等于2的完美幂的立方体,每个z-index的坐标都是< =(x,y,z)