2

このウィキペディアの記事で説明されている手法を使用して四分木を構築しています。座標を 2 次元または 3 次元配列に格納しています。

boost::array<unsigned int, 2 /* 3 */> coord;

Z オーダーで次のボックスの座標を計算するメソッドが必要です。デインターリーブよりも、ビットをインターリーブして 1 ずつ増やすことで機能しますが、これは非常に複雑になります。ビットをインターリーブせずに機能する記事の cmp_zorder(...) メトンに似た実装があることを願っています。

4

1 に答える 1

1

これが「切断された」加算アルゴリズムでxありy、出力と同様に入力であり、インターリーブされた座標の最下位ビットは次のようになると想定されます(ウィキペディアの記事xと同じ)

int carry = 1;
do
{
    int newcarry = x & carry;
    x ^= carry;
    carry = newcarry;
    newcarry = (y & carry) << 1;
    y ^= carry;
    carry = newcarry;
} while (carry != 0);

テストはしましたが、ほんの少しです。

于 2012-05-27T16:43:54.667 に答える