实习的时候要优化八叉树,当时有个想法就是把八叉树的枝叶节点分开,因为枝节点要存八个指针而叶节点要存法向量之类的东西,而这些东西是不通用的,当点量达到几千万时会浪费几个g的内存。
当时的想法是写一个base结构体,然后用branch和leaf去继承,不过写的时候发现为了实现遍历他们要互相包含对方的指针,base指针是操作不了子类的私有属性的,后来就不了了之了,这几天又想了一下是不是可以用union解决呢。用level记录节点的深度来判断是leaf还是branch,好像pcl就是这么干的
struct Node;
struct leafAttribute;
struct branchAttribute;
struct leafAttribute //叶节点属性
{
bool isolated = false;
bool isFront = false;//项目要用的杂七杂八的属性
float normal[3] = { 0,0,0 };
Node* father = nullptr;
};
struct branchAttribute //枝节点属性
{
Node* pointer[8] = { nullptr };
};
union attribute
{
attribute(){}//不写会报错
leafAttribute leaf;
branchAttribute branch;
};
struct Node {
float center[3] = { 0 };
int level=0;
attribute att;
};