कार्यान्वयन templatized मैं एक KDTree, जो अब के लिए केवल एक BarnesHut कार्यान्वयन के लिए Quadtree या Octree के रूप में काम करना चाहिए की एक templatized कार्यान्वयन लिखने के लिए जा रहा हूँ।QuadTree या Octree C++
यहां महत्वपूर्ण बिंदु डिजाइन है, मैं आयाम की संख्या निर्दिष्ट करना चाहता हूं जहां पेड़ टेम्पलेट पैरामीटर के रूप में परिभाषित किया गया है और फिर बस कुछ सामान्य तरीकों की घोषणा करें, जो स्वचालित रूप से सही तरीके से व्यवहार करते हैं (मुझे लगता है कि कुछ टेम्पलेट विशेषज्ञता है तब आवश्यक)।
2^2 (quadtree) या 2^3 (octree) नोड्स के लिए क्रम में टेम्पलेट विशेषज्ञ करना चाहते हैं।
है किसी को कुछ डिजाइन विचार है? मैं विरासत से बचना चाहता हूं क्योंकि यह मुझे स्थिर आवंटन के बजाय गतिशील स्मृति आवंटन करने के लिए बाध्य करता है।
यहाँ एन 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?
};
हो सकता है एक और समस्या यह है कि quadtree 4 नोड्स लेकिन 2 आयाम है है, octree 8 नोड्स, लेकिन 3 आयाम है, अर्थात् नोड्स की संख्या 2^dimension
है। क्या मैं इसे टेम्पलेट-मेटाप्रोग्रामिंग के माध्यम से निर्दिष्ट कर सकता हूं? मैं संख्या 4 और 8 रखना चाहता हूं ताकि लूप अनोलर तेज हो सके।
धन्यवाद!
आप "पत्ता" शब्द का गलत इस्तेमाल कर रहे हैं, सही शब्द "नोड" है। एक "पत्ता" किसी भी बच्चे के बिना एक नोड है। –
तुम भी kdtrees और ट्रैक्टर मिश्रण कर रहे हैं/octree गलत तरीके से, वे एक ही नहीं कर रहे हैं .. – KillianDS
अधिकार (यानी एक 2d पेड़ एक quadtree के बराबर नहीं है), मैं बस एक n-ary पेड़ जो 2D में quadtree की तरह बर्ताव चाहते हैं और 3 डी में ऑक्टेट्री, मैं सवाल संपादित कर रहा हूँ। – linello