空间管理 详解八叉树

您所在的位置:网站首页 三维空间划分 空间管理 详解八叉树

空间管理 详解八叉树

2023-08-27 05:56| 来源: 网络整理| 查看: 265

空间管理 详解八叉树 前言1.数据结构选型1.1数组1.2树型结构1.3哈希线性结构 2.查询2.1 Morton位置码2.1.1 Morton码计算2.1.2 位置与Morton码的映射2.1.3 代码中的运算2.1.3.1 按位分离2.1.3.2 交叉组合 3.插入4.删除5.碰撞检测5.2 避免多次检测

前言

首先先明确一个概念,八叉树只做空间管理,而碰撞相关的检测是另外的东西 在这里插入图片描述

1.数据结构选型 1.1数组

需要为完全树,比较不灵活,内存占用较大

1.2树型结构

可以不为完全树,深度不一,需要再扩展,节省内存,搜索数据的复杂度为 O ( l o g n ) O(logn) O(logn)

1.3哈希线性结构

通过哈希表存储,散列处理比较麻烦,但是搜索的复杂度为 O ( 1 ) O(1) O(1),并且使用Morton码作为键值时,有很好的占位率

2.查询 2.1 Morton位置码

在这里插入图片描述 Morton码是通过一定的编码方式,将空间上的位置通过Z字形管理起来。

2.1.1 Morton码计算

将行数和列数的2进制交叉组合,可以得到位置码

为什么要交叉组合:因为Morton码的增加是通过每行增加两位后,再进入下一行的

例子: 第3行第4列: 3的二进制表示:011 4的二进制表示:100 交叉组合:011010

2.1.2 位置与Morton码的映射

假设x轴向上的八叉树范围为 [ x m i n , x m a x ] [x_{min},x_{max}] [xmin​,xmax​],八叉树半径为r,则 位置码 p = x − x m i n 2 ∗ r p=\frac{x-x_{min}}{2*r} p=2∗rx−xmin​​ p0.5则数位于yz平面的右侧,为1 将其转换为二进制,有效高位为0,则在yz平面的左侧 将其转换为二进制,有效高位为1,则在yz平面的右侧

次有效高位可以判断是在子节点中的左右,因为每次都是原先的二分之一。 在这里插入图片描述 在这里插入图片描述

2.1.3 代码中的运算 2.1.3.1 按位分离 UInt32 Part1By2(UInt32 n) { n = (n ^ (n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3