私はKDTreeのテンプレート化された実装を書くつもりですが、今はBarnesHut実装ではQuadtreeまたはOctreeとしてしか動作しません。QuadTreeまたはOctree C言語でのテンプレート化された実装
ここで重要な点はデザインですが、ツリーがテンプレートパラメータとして定義されているディメンションの数を指定し、いくつかの一般的なメソッドを宣言して、正しい方法で自動的に動作するようにしたいと考えています。その後必要)。
2^2(クォードツリー)または2^3(オクトリー)ノードを持つためにテンプレートを特化したいと思います。
デザインアイデアはありますか?静的な割り当てではなく動的なメモリ割り当てを行うことを制限しているため、継承は避けたいと思います。
ここでNは2又は3
template<int N>
class NTree
{
public:
NTree<N>(const std::vector<Mass *> &);
~NTree<N>()
{
for (int i=0; i<pow(2,N); i++)
delete nodes[i];
}
private:
void insert<N>(Mass *m);
NTree *nodes[pow(2,N)]; // is it possible in a templatized way?
};
することができる別の問題は、四分木は、4つのノードが、2次元を有することで、オクツリーは、8つのノードが、3次元を有し、すなわち、ノードの数が2^dimension
あります。テンプレートメタプログラミングでこれを指定できますか?ループアンローラーがより速くなるように、私は4番と8番のままにしておきたいと思います。
ありがとうございました!
「リーフ」という用語を誤って使用していますが、正しい用語は「ノード」です。 「リーフ」は、子なしのノードです。 –
kdtreesとquad/octreeも混在していますが、それらは同じではありません(つまり、2Dツリーはクォッドツリーと等しくありません)。 – KillianDS
右のように、2Dツリーのquadtreeのように動作するn-aryツリーが必要です3Dでオクトリー、私は質問を編集しています。 – linello