最近邻居的莫顿编码?

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

【讨论】:

以上是关于最近邻居的莫顿编码?的主要内容,如果未能解决你的问题,请参考以下文章

最近邻居 - k-d 树 - ***证明

高维数据中的最近邻?

K近邻算法-KNN

在 Weka 中使用 KNN 获取数据集中每个点的 n 个最近邻

K-近邻(KNN)算法

kNN - 如何根据计算出的距离在训练矩阵中定位最近的邻居