八叉树算法的改进

1、八叉树的定义(熟悉的直接跳到第二步)
 
你有一个立方体,按照如下方法给它三刀:

横切一刀,竖劈一刀,在与之前竖劈方向垂直的方向再砍一刀,这样就分成八个大小相同的立方体;

对小立方体重复砍劈。。。。。

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 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值