User Tools

Site Tools


ftbl:class:kernel:octree

Octree(ulong size,double * boundary,PosGetter func )

原型 Octree(ulong size,double * boundary,PosGetter func )
描述 构建元素规模为size,边界为boundary的八叉树空间,坐标计算函数为func
参数 [i]ulong size: 元素规模
[i]double * boundary: 空间边界
[i]PosGetter func : 坐标计算函数
返回值 无

void insertData(void * pData)

原型 void insertData(void * pData)
描述 插入元素
参数 [i]void * pData: 元素指针
返回值 无

void removeData(void * pData)

原型 void removeData(void * pData)
描述 删除元素
参数 [i]void * pData: 元素指针
返回值 无

void insertData(double * pos,void * pData)

原型 void insertData(double * pos,void * pData)
描述 插入坐标为pos的元素pData
参数 [i]double * pos: 元素pData对应的坐标
[i]void * pData: 元素指针
返回值 无

void * searchData(double * pos)

原型 void * searchData(double * pos)
描述 搜索在位置pos上的元素
参数 [i]double * pos: 位置坐标
返回值 如在最大深度上对应于pos的叶节点存在则返回该叶节点的第一个元素,否则返回0

void * searchNearestData(double * pos)

原型 void * searchNearestData(double * pos)
描述 搜索离位置pos最近的元素
参数 [i]double * pos: 位置坐标
1,1)的空间里存在元素,返回其中最近的元素,否则返回0
返回值

void searchAdjacentData(double * pos, double radius, LinkList * pTgts,bool bSort = false)

原型 void searchAdjacentData(double * pos, double radius, LinkList * pTgts,bool bSort = false)
描述 搜索相邻元素
参数 [i]double * pos: 位置坐标
[i] double radius: 搜索半径
[i] LinkList * pTgts: 存放相邻元素的链表
[i]bool bSort = false: 对否对相邻元素按照距离进行排序,默认否
返回值 无

void removeData(double * pos,void * pData)

原型 void removeData(double * pos,void * pData)
描述 删除在位置pos的元素pData(如存在)
参数 [i]double * pos: 位置坐标
[i]void * pData: 元素指针
返回值 无

void updateOptimicalDepth()

原型 void updateOptimicalDepth()
描述 计算更新最佳深度(优化深度)
参数 无
返回值 无

void clear()

原型 void clear()
描述 清除所有元素
参数 无
返回值 无

void insertRootLeaf()

原型 void insertRootLeaf()
描述 插入根节点
参数 无
返回值 无

ulong getMortonKey(double * pos,int level = MAX_OCTREE_LEVEL)

原型 ulong getMortonKey(double * pos,int level = MAX_OCTREE_LEVEL)
描述 按最大层次level计算位置pos的morton码
参数 [i]double * pos: 位置坐标
[i]int level = MAX_OCTREE_LEVEL: 最大深度,默认为10,不能比10大
返回值 pos对应的Morton码

int getDepth(ulong key)

原型 int getDepth(ulong key)
描述 获取Morton码的深度值
参数 [i]ulong key: Morton码
返回值

void appendData(OctreeLeaf * pLeaf, void * pData)

原型 void appendData(OctreeLeaf * pLeaf, void * pData)
描述 将元素添加到叶节点pLeaf上
参数 [i]OctreeLeaf * pLeaf: 叶节点
[i] void * pData: 待添加的元素,元素的坐标需与pLeaf相容
返回值 无

void removeData(ulong key,void * pData)

原型 void removeData(ulong key,void * pData)
描述 从Morton编码为key的叶节点中删除元素pData
参数 [i]ulong key: 叶节点的Morton码
[i]void * pData: 元素指针
返回值 无

void removeLeaf(ulong key)

原型 void removeLeaf(ulong key)
描述 删除Morton码为key的叶节点以及属于它的更低层次的所有叶节点
参数 [i]ulong key: Morton码
返回值 无

void splitLeaf(OctreeLeaf * pLeaf)

原型 void splitLeaf(OctreeLeaf * pLeaf)
描述 将叶节点细分使当前节点的元素深度加1
参数 [i]OctreeLeaf * pLeaf: 待细分的叶节点
返回值 无

void searchData(ulong key, LinkList * pTgts)

原型 void searchData(ulong key, LinkList * pTgts)
描述 从key所属的子空间开始往下搜索所有的元素
参数 [i]ulong key: Morton码
[i] LinkList * pTgts: 搜索得到的元素放入到此链表中
返回值 无

void searchDataInradius(ulong key, double * pos,double radius,LinkList * pTgts)

原型 void searchDataInradius(ulong key, double * pos,double radius,LinkList * pTgts)
描述 从key开始往下搜索离pos距离radius以内的所有元素
参数 [i]ulong key: Morton码
[i] double * pos: 位置坐标
[i]double radius: 搜索半径
[i]LinkList * pTgts: 目标元素放入到此链表中
返回值 无

ulong truncateKey(ulong key,int level)

原型 ulong truncateKey(ulong key,int level)
描述 按深度level截断key形成新的Morton码
参数 [i]ulong key: Morton码
[i]int level: 深度
返回值 新的Morton码

void getIndex(ulong key,int* index)

原型 void getIndex(ulong key,int* index)
描述 将Morton码转化为以m_dStep为步长的索引值
参数 [i]ulong key: Morton码
[i]int* index: 0-base索引值
返回值 无

OctreeLeaf * createLeaf(ulong key,void * pData)

原型 OctreeLeaf * createLeaf(ulong key,void * pData)
描述 创建Morton码为key的叶节点,并将元素pData加入到该叶节点中
参数 [i]ulong key: Morton码
[i]void * pData: 元素,元素的坐标需与Morton码相容
返回值 叶节点指针

int getChildCount(ulong key)

原型 int getChildCount(ulong key)
描述 获取Morton码为key的子空间所包含的所有元素个数
参数 [i]ulong key: Morton码
返回值 元素个数

void getCenterByKey(ulong key,double * pos)

原型 void getCenterByKey(ulong key,double * pos)
描述 获取Morton码为key的子空间的中心坐标
参数 [i]ulong key: Morton码
[i]double * pos: Morton码为key的子空间的中心坐标
返回值 无
ftbl/class/kernel/octree.txt · Last modified: 2025/05/09 14:46 (external edit)