最近邻居的莫顿编码?
Posted
技术标签:
【中文标题】最近邻居的莫顿编码?【英文标题】:Morton encoding of nearest neighbours? 【发布时间】:2020-08-03 08:39:30 【问题描述】:我在 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) 计算这些相邻编码?我知道 wikipedia 有 2D 8 位整数的解决方案:
M(x,y-1) = ((M(x,y) & 0b10101010) - 1 & 0b10101010) | (M(x,y) & 0b01010101)
3 维网格的等效算法是什么样的?
【问题讨论】:
嗨@scrab--您可以在Computer Science Stackexchange 姐妹网站上获得更多帮助。寻求算法方面的帮助似乎更属于该网站的一般职权范围。 【参考方案1】:是否严格要求您必须以与您编写的公式类似的方式计算邻居?如果没有,您可以使用您已有的 (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
【讨论】:
以上是关于最近邻居的莫顿编码?的主要内容,如果未能解决你的问题,请参考以下文章