1、八叉树的定义(熟悉的直接跳到第二步)
你有一个立方体,按照如下方法给它三刀:
横切一刀,竖劈一刀,在与之前竖劈方向垂直的方向再砍一刀,这样就分成八个大小相同的立方体;
对小立方体重复砍劈。。。。。
2、分析
(1) 构建规则的八叉树
如果构建规则的八叉树 ,则结构所占的空间将非常大,而且很多情况下这些结构都是无用的;
常规构建方法:
OctTreeNode *pRootNode = NULL;
你有一个立方体,按照如下方法给它三刀:
横切一刀,竖劈一刀,在与之前竖劈方向垂直的方向再砍一刀,这样就分成八个大小相同的立方体;
对小立方体重复砍劈。。。。。
2、分析
(1) 构建规则的八叉树
如果构建规则的八叉树 ,则结构所占的空间将非常大,而且很多情况下这些结构都是无用的;
常规构建方法:
struct OctTreeNode{
LHLONG tag;//对于叶节点,为统计的颜色数;对于非叶节点,恒为-1。
struct OctTreeNode *pChild[8];//下一级节点
};
//创建八叉树
int depth = 6;
//创建八叉树
OctTreeNode *pRootNode = NULL;
m_depth = depth;
m_nodeNum = 1;
for(LHINT i=1; i<=m_depth; i++){
m_nodeNum += (1 << ((i << 2) - i));
}
pRootNode = (OctTreeNode *)LHMalloc((m_nodeNum << 5) + (m_nodeNum << 2));//OctTreeNode的大小为36字节,分解为32(2的5次方)+ 4(2的平方)
if(pRootNode == NULL){
goto initialize_octTree_fail;
}
memset(pRootNode, 0, sizeof(OctTreeNode));
pRootNode->tag = -1;
ret = createOctTree(1, pRootNode);
//递归函数
//递归函数
int createOctTree(
int