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)