我在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-2,y-1、z+0(、M。。。
我的问题是,如何从M(x,y,z(直接计算这些邻居编码?我知道维基百科有一个2D中8位整数的解决方案:
M(x,y-1(=((M(x、y(&0b10101010(-1&0b10101010(|(M(x,y(&0b01010101(
三维网格的等效算法是什么样子的?
是否严格要求您必须以与您编写的公式类似的方式计算邻居?如果没有,您可以使用(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