私は、ツリー ノードが次元の長さ (2 のべき乗) でテンプレート化されている octree の実装に取り組んでいます。
template<long N>
struct node_t {
enum { DIM = 1 << N };
node_t<N+1> * parent;
node_t<N-1> * children[8];
long count;
}
また、データを指すように N = 0 (葉) に特化しています。
struct node_t<0> {
enum { DIM = 1 };
node_t<1> * parent;
data_t data;
long count;
}
(余談ですが、親ポインターを除外する N_MAX の特殊化もおそらく必要だと思います。そうしないと、C++ は無限に増加する N の型を生成しますか?しかし、それは私の質問にはあまり関係ありません。)
オクツリーが占有する 3D 空間で光線に沿って進む関数を作成したいので、表向きはルート ノード (既知の型を持つ) へのポインターを保持し、ルートからオクツリーを毎回トラバースすることができます。ステップ。ただし、現在のノードを追跡できる、より「ローカル」なオプションを希望します。これにより、可能であればツリーの下位から開始できるため、octree の上位ノードを不必要にトラバースすることを回避できます。
しかし、スライスを経験しないように、その型ポインターが何であるか (またはこれを実装する他の方法) がわからない。
ディメンションは単純に として実装できるため、テンプレートに縛られていませんlong const
。しかし、葉がinodeとは異なる子タイプを持つようにする方法がわかりません。
ご協力いただきありがとうございます!
アップデート
これに似た方法ではなく、このようにしたい理由は、各ノードの変数のためですcount
。カウントが 0 の場合、キューブ全体をジャンプしたいので、葉を通過する時間を無駄にします。私は空であることを知っています。(これはレイトレーシング ボクセル エンジン用です。)