最新公告
  • 欢迎您光临小酒资源吧,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 分享个octree,方便朋友们调用

    分享个octree,方便朋友们调用 最后编辑:2020-09-01
    增值服务: 自动发货 使用说明 安装指导 环境配置二次开发BUG修复

    头文件
    [C++] 纯文本查看 复制代码#ifndef __OCTREE_H__
    #define __OCTREE_H__
    #include <map>

    class OctreeNode
    {
    public:
    OctreeNode();
    OctreeNode(int level, int value);
    OctreeNode(const OctreeNode& node);
    ~OctreeNode();

    public:
    int Assign(int level, int value);
    int Assign(const OctreeNode& node);
    int InsertChild(int idx, OctreeNode*& node);
    int RemoveChild(int idx);
    int PeekChild(int idx, OctreeNode& node);
    void Dump(std::fstream& fs);
    private:
    std::map<int, OctreeNode*> m_childNode;
    int m_val;
    int m_lvl;
    };

    class Octree
    {
    public:
    Octree();
    Octree(int depth);
    ~Octree();
    void InitChild(OctreeNode *child, int d, int depth);
    void Dump(std::fstream& fs);
    private:
    int m_childNum;
    int m_depth;
    OctreeNode *m_root;
    };
    #endif // !__OCTREE_H__

    源文件
    [C++] 纯文本查看 复制代码#include "stdafx.h"
    #include "octree.h"
    #include <iostream>
    #include <fstream>

    OctreeNode::OctreeNode()
    :m_val(0), m_childNode(), m_lvl(0)
    {
    }

    OctreeNode::OctreeNode(int level, int value)
    :m_val(value), m_childNode(), m_lvl(level)
    {
    }

    OctreeNode::OctreeNode(const OctreeNode& node)
    {
    if (this == &node) {
    return;
    }
    m_val = node.m_val;
    m_lvl = node.m_lvl;
    std::map<int, OctreeNode*>::const_iterator iter;
    for (iter = node.m_childNode.begin(); node.m_childNode.end() != iter; iter++) {
    OctreeNode *child = NULL;
    if (iter->second) {
    child = new OctreeNode(*iter->second);
    }
    m_childNode[iter->first] = child;
    }
    }

    OctreeNode::~OctreeNode()
    {
    std::map<int, OctreeNode*>::iterator iter;
    for (iter = m_childNode.begin(); m_childNode.end() != iter; iter++) {
    if (iter->second) {
    delete iter->second; //
    iter->second = NULL;
    }
    }
    m_childNode.clear();
    }

    int OctreeNode::Assign(int level, int value)
    {
    m_lvl = level;
    m_val = value;
    return 0;
    }

    int OctreeNode::Assign(const OctreeNode& node)
    {
    if (this == &node) {
    return 0;
    }
    m_val = node.m_val;
    m_lvl = node.m_lvl;
    std::map<int, OctreeNode*>::const_iterator iter;
    for (iter = node.m_childNode.begin(); node.m_childNode.end() != iter; iter++) {
    OctreeNode *child = NULL;
    if (iter->second) {
    child = new OctreeNode(*iter->second);
    }
    m_childNode[iter->first] = child;
    }
    return 0;
    }

    int OctreeNode::InsertChild(int idx, OctreeNode*& node)
    {
    m_childNode[idx] = node;
    return 0;
    }

    int OctreeNode::RemoveChild(int idx)
    {
    if (m_childNode[idx] != NULL) {
    delete m_childNode[idx];
    m_childNode[idx] = NULL;
    }
    return 0;
    }

    int OctreeNode::PeekChild(int idx, OctreeNode& node)
    {
    if (m_childNode[idx] != NULL) {
    node.Assign(*m_childNode[idx]);
    }
    return 0;
    }

    void OctreeNode::Dump(std::fstream& fs)
    {
    std::map<int, OctreeNode*>::const_iterator iter;
    fs << "[" << m_lvl << "," << m_val << "] ";
    fs << std::endl;
    for (iter = m_childNode.begin(); m_childNode.end() != iter; iter++) {
    for (int id = 0; id < m_lvl; id++) {
    fs << " ";
    }
    if (iter->second) {
    iter->second->Dump(fs);
    }
    }
    }

    Octree::Octree()
    :m_depth(0), m_root(NULL),m_childNum(8)
    {

    }

    Octree::Octree(int depth)
    : m_depth(depth), m_root(NULL), m_childNum(8)
    {
    m_root = new OctreeNode();
    InitChild(m_root, 0, m_depth);
    }

    Octree::~Octree()
    {
    delete m_root;
    }

    void Octree::InitChild(OctreeNode *root, int d, int depth)
    {
    if (root == NULL) {
    return;
    }
    if (++d >= depth) {
    return;
    }
    unsigned int l;
    for (l = 0; l < m_childNum; l++) {
    int value = l;
    OctreeNode *child = new OctreeNode(d, value);
    if (child != NULL) {
    root->InsertChild(l, child);
    InitChild(child, d, depth);
    }
    }
    return;
    }

    void Octree::Dump(std::fstream& fs)
    {
    m_root->Dump(fs);
    }

    主程序
    [Asm] 纯文本查看 复制代码int main(int argc, char** argv)
    {
    Octree oct(7);
    std::fstream fs;
    fs.open("octree_log.txt", std::ios::trunc | std::ios::out | std::ios::in);
    oct.Dump(fs);
    fs.close();
    }

    猜你在找

    1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!603313839@qq.com
    2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
    3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
    4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!

    小酒资源吧 » 分享个octree,方便朋友们调用

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    免责声明/技术服务/售后服务等
    本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!603313839@qq.com
    • 2020-09-01Hi,初次和大家见面了,请多关照!

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过500元的程序/模板免费一次安装,需提你供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、火车头规则、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)
      售后服务时间 周一至周日(法定节假日除外) 9:00-22:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: 603313839@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这款程序/模板/下载/有疑问,可以跟我联系哦!

    联系作者
    • 3732会员总数(位)
    • 4509资源总数(个)
    • 0本周发布(个)
    • 0 今日发布(个)
    • 450稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
  • 2020 XiaoJiu8.cn - & WordPress Theme. All rights reserved 黔ICP备17003460号-5

  • XML地图 | 站长导航
         
    升级SVIP尊享更多特权立即升级