0

我在 3D 网格上使用 morton 编码,以便一组点 (x,y,z) 给我一个 morton 编码 M(x,y,z) 的 1D 数组,其中 x,y,z 是整数。对于每个 M(x,y,z),我的计算还需要网格上的 26 个最近邻,即。M(x-1,y-1,z-1), M(x-1,y-1,z+0), M(x-1,y-1,z+1), M(x-1 ,y+0,z-1)...

我的问题是,我如何直接从 M(x,y,z) 计算这些邻居编码?我知道维基百科有一个二维 8 位整数的解决方案:

M(x,y-1) = ((M(x,y) & 0b10101010) - 1 & 0b10101010) | (M(x,y) & 0b01010101)

3 维网格的等效算法是什么样的?

4

1 回答 1

0

是否严格要求您必须以与您编写的公式类似的方式计算邻居?如果没有,您可以使用已有的(x, y, z)坐标,您可以通过对这些坐标执行常规的 Morton 顺序编码,从中获取所有相邻的 Morton 顺序索引。这是 Python 语法中的一个简单函数,它显示了我的意思:

def get_neighbour_indices_3d(point):
    x, y, z = point  # The point you are currently looking at and know the coordinates of
    neighbours_indices = []
    for x_new in range(x-1, x+2):
        for y_new in range(y-1, y+2):
            for z_new in range(z-1, z+2):
                # Maybe do some check that you're not beyond the edge or at the original point
                neighbours_indices.append(morton_encode(x_new, y_new, z_new))
    return neighbours_indices
于 2020-06-06T19:10:27.627 回答