0

3D グリッドでモートン エンコーディングを使用しているため、一連のポイント (x、y、z) によってモートン エンコーディング 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) から直接計算するにはどうすればよいですか? ウィキペディアに 2D の 8 ビット整数の解決策があることは知っています。

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

3 次元グリッドの同等のアルゴリズムはどのように見えますか?

4

1 に答える 1

0

あなたが書いた式と同様の方法で隣人を計算しなければならないというのは厳密な要件ですか? そうでない場合は、既に持っている(x, y, z) 座標を使用できます。この座標から、これらに対して通常のモートン順序エンコードを実行するだけで、隣接するすべてのモートン順序インデックスを取得できます。これは、私が何を意味するかを示す 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 に答える