数据结构——八叉树

八叉树(Octree)是一种用于表示和管理三维空间的树状数据结构。它将三维空间递归地分割成八个八分体(octant),每个八分体可以继续分割,以实现对三维空间的更精细的划分。八叉树通常用于解决空间搜索和查询问题,例如三维物体碰撞检测、体素化(Voxelization)、地理信息系统等领域。

在这里插入图片描述

#include <iostream>
#include <vector>// 定义三维点的结构体
struct Point3D {float x;float y;float z;Point3D(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
};// 定义八叉树节点
struct OctreeNode {Point3D center;float size;OctreeNode* children[8];OctreeNode(Point3D _center, float _size) : center(_center), size(_size) {for (int i = 0; i < 8; i++) {children[i] = nullptr;}}
};class Octree {
private:OctreeNode* root;float rootSize;// 在指定深度下递归插入节点OctreeNode* insert(OctreeNode* node, Point3D point, float size) {if (node == nullptr) {return new OctreeNode(point, size);}// 确定点位于八分体的哪个子节点int index = 0;if (point.x >= node->center.x) index |= 1;if (point.y >= node->center.y) index |= 2;if (point.z >= node->center.z) index |= 4;// 递归插入到相应的子节点float newSize = node->size / 2.0f;node->children[index] = insert(node->children[index], point, newSize);return node;}// 在指定深度下递归搜索节点bool search(OctreeNode* node, Point3D point, float size) {if (node == nullptr) {return false;}if (node->center.x == point.x && node->center.y == point.y && node->center.z == point.z) {return true;}// 确定点位于八分体的哪个子节点int index = 0;if (point.x >= node->center.x) index |= 1;if (point.y >= node->center.y) index |= 2;if (point.z >= node->center.z) index |= 4;// 递归搜索相应的子节点float newSize = node->size / 2.0f;return search(node->children[index], point, newSize);}public:Octree(float size) : root(nullptr), rootSize(size) {}// 插入一个点void insert(Point3D point) {root = insert(root, point, rootSize);}// 搜索一个点是否存在bool search(Point3D point) {return search(root, point, rootSize);}
};int main() {Octree octree(100.0f); // 创建八叉树,定义根节点的大小Point3D point1(10.0f, 20.0f, 30.0f);Point3D point2(80.0f, 90.0f, 110.0f);octree.insert(point1); // 插入点1octree.insert(point2); // 插入点2Point3D searchPoint(80.0f, 90.0f, 110.0f);bool found = octree.search(searchPoint); // 搜索点2if (found) {std::cout << "Point found in the octree." << std::endl;} else {std::cout << "Point not found in the octree." << std::endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/139305.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub Copilot Chat

9月21日&#xff0c;GitHub在官网宣布&#xff0c;所有个人开发者可以使用GitHub Copilot Chat。用户通过文本问答方式就能生成、检查、分析各种代码。 据悉&#xff0c;GitHub Copilot Chat是基于OpenAI的GPT-4模型打造而成&#xff0c;整体使用方法与ChatGPT类似。例如&…

菜单栏图标管理软件Bartender mac 5.0.10中文版介绍

Bartender mac是一款菜单栏图标管理软件&#xff0c;功能强大&#xff0c;可以快速管理菜单栏的图标、显示内容和时间&#xff0c;只需在菜单栏中滑动或滚动、单击菜单栏&#xff0c;或者如果您愿意&#xff0c;只需将鼠标悬停即可立即访问隐藏的菜单栏项目。 Bartender软件介绍…

SAP 选择屏幕动态通过Radio Button 显示与隐藏以及控制是否必输

如何在选择屏幕上进行动态展示屏幕字段&#xff0c;并且进行必输项检查控制 1. 选择屏幕定义 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.SELECTION-SCREEN BEGIN OF LINE.PARAMETERS: p_r1 TYPE c RADIOBUTTON GROUP grp USER-COMMAND uc DEFAULT X. &q…

基于Java+SpringBoot+Vue物流管理小程序系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于B50610 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择IT6802解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包UDP…

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境

目录 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne&#xff08;Go 跨平台GUI&#xff09;开发…

DataLink-可视化数据流程编排(一)

DATALINK DataLink是一款基于Actor模型开发的数据流程编排工具&#xff0c;通过拖拽方式在画布中添加各类节点&#xff0c;创建数据处理规则。支持监听多种协议端口&#xff0c;订阅消息中间件&#xff0c;以及读写不同类型的数据库。并提供分发、过滤、打包、延迟、限流、脚本…

小程序开发一个多少钱啊

在今天的数字化时代&#xff0c;小程序已经成为一种非常流行的应用程序形式。由于它们的便捷性、易用性和多功能性&#xff0c;小程序吸引了越来越多的用户和企业。但是&#xff0c;很多人在考虑开发一个小程序时&#xff0c;都会遇到同一个问题&#xff1a;开发一个小程序需要…

Java多线程(三)

文章目录 一、线程通信1.涉及到的三个方法2.说明3.线程通信的例子&#xff1a;使用两个线程打印 1-100 交替打印 二、sleep()和wait()的异同&#xff1f;1.相同点2.不同点 三、线程通信的应用&#xff1a;经典例题&#xff1a;生产者/消费者问题1.问题描述2.代码实现 四、创建线…

【Spatial-Temporal Action Localization(二)】论文阅读2017年

文章目录 1. ActionVLAD: Learning spatio-temporal aggregation for action classification [code](https://github.com/rohitgirdhar/ActionVLAD/)[](https://github.com/rohitgirdhar/ActionVLAD/)摘要和结论引言&#xff1a;针对痛点和贡献相关工作模型框架思考不足之处 2.…

大数取模运算Barrett reduction

Barrett reduction 约减概述 约减的定义(reduction): z ( m o d p ) z \pmod p z(modp) 优化约减的目的:取模操作的底层实现往往使用到的是除法&#xff0c;而除法操作往往是较为耗时的&#xff0c;因此需要把除法操作替换为不那么费时的其他操作。 Barrett 约减概述 单模数…

识别准确率达 95%,华能东方电厂财务机器人实践探索

摘 要&#xff1a;基于华能集团公司大数据与人工智能构想理念&#xff0c;结合东方电厂实际工作需要&#xff0c;财务工作要向数字化、智能化纵深推进&#xff0c;随着财务数字化转型和升级加速&#xff0c;信息化水平不断提升&#xff0c;以及内部信息互联互通不断加深&#x…

基于Xml方式Bean的配置-命名空间种类

Spring的标签 Spring的xml标签大体上分为两类&#xff0c;一种是默认标签&#xff0c;一种是自定义标签 默认标签&#xff1a;就是不用额外导入其它命名空间约束的标签&#xff0c;例如<bean>标签 标签作用 <beans> 一般作为xml配置根标签&#xff0c;其他标签都是…

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档 2023/9/19 11:20 python pdf word https://blog.csdn.net/u013185349/article/details/130059657 Python实现PDF转Word文档 AcceptedLin 已于 2023-04-10 14:45:17 修改 1243 收藏 1 文章标签&#xff1a; pd…

蓝牙技术|蓝牙轻松部署物联网项目,智能照明利用蓝牙特性快速发展

蓝牙物联网&#xff0c;特别是在低功耗蓝牙(BLE)普及的推动下&#xff0c;在物联网领域取得了显著增长和采用。由于低能耗和长时间使用小型电池的能力&#xff0c;BLE已成为许多物联网应用的首选无线技术。 BLE使用与蓝牙相同的无线电频段&#xff0c;同样可以实现两个设备之…

Java面试题整理(带答案)

目录 TCP和UDP的区别 get和post的区别 Cookie和session的区别 Java的基本类型有哪些&#xff1f; 抽象类和接口区别&#xff1f; 对于堆栈的理解 和equals区别 如何理解Java多态&#xff1f; 创建线程都有哪些方式 脏读、不可重复度、幻读都是什么&#xff1f; Jav…

impala常用时间函数,date->string->timestamp互转

impala 和hive不一样&#xff0c;hive是弱类型&#xff0c;比如int和string在大部分条件下可以比较 比如hive select 11 --结果true或false 但是impala select 11 报错 operands of type TINYINT and STRING are not comparable: 1 1 这样带来的好处是 类型一致结果更…

【Vue】修饰符、表单提交方式、自定义组件的关键步骤

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Vue快速入门》。&#x1f3af;&#x1f3af; &…

从Langchain到ReAct,在大模型时代下全新的应用开发核心

简介&#xff1a; 什么是ReAct框架关于什么是langchain&#xff0c;可以参考&#xff1a;https://ata.alibaba-inc.com/articles/266839?spmata.23639420.0.0.1dea7536uD7yhh在使用langchain的过程中&#xff0c;大模型给人留下最深刻的印象无疑是Agent功能。大模型会自己分析…

可转债实战与案例分析——成功的和失败的可转债投资案例、教训与经验分享

实战与案例分析——投资案例研究 股票量化程序化自动交易接口 一、成功的可转债投资案例 成功的可转债投资案例提供了有价值的经验教训&#xff0c;以下是一个典型的成功案例&#xff1a; 案例&#xff1a;投资者B的成功可转债投资 投资者B是一位懂得风险管理的投资者&#…