Tôi sẽ viết một triển khai templatized của một KDTree, mà bây giờ chỉ nên làm việc như Quadtree hoặc Octree để thực hiện BarnesHut. Điểm quan trọng ở đây là thiết kế, tôi muốn chỉ định số thứ nguyên mà cây được định nghĩa là tham số mẫu và sau đó chỉ cần khai báo một số phương thức phổ biến, sẽ tự động xử lý đúng cách (tôi nghĩ rằng một số chuyên môn về mẫu là cần thiết sau đó).Thực hiện khuôn mẫu QuadTree hoặc Octree trong C++
Tôi muốn chuyên mẫu để có các nút 2^2 (quadtree) hoặc 2^3 (octree).
Có ai đó có một số ý tưởng thiết kế không? Tôi muốn tránh thừa kế bởi vì nó hạn chế tôi để làm phân bổ bộ nhớ động hơn là phân bổ tĩnh.
Đây N có thể là 2 hoặc 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?
};
vấn đề khác là quadtree có 4 nút nhưng 2 chiều, octree có 8 nút, nhưng 3 chiều, tức là số lượng nút là 2^dimension
. Tôi có thể chỉ định điều này thông qua lập trình meta-template không? Tôi muốn giữ số 4 và 8 để vòng lặp unroller có thể nhanh hơn.
Cảm ơn bạn!
Bạn đang sử dụng cụm từ "lá" không chính xác, cụm từ chính xác là "nút". Một "lá" là một nút mà không có bất kỳ trẻ em. –
Bạn cũng đang trộn kdtrees và quad/octree không chính xác, chúng không giống nhau (nghĩa là cây 2D không bằng một quadtree) .. – KillianDS
Phải, tôi chỉ đơn giản muốn một cây n-ary hoạt động như quadtree trong 2D và octree ở chế độ 3D, tôi đang chỉnh sửa câu hỏi. – linello