最近利用OpenGL实现了一个简单的四叉树,对窗口进行分割。
数据结构:
m_bounds是节点的矩形包围盒, m_nodes数组存储四个孩子的节点指针, m_contents存储那些不包含于四个孩子但是包含于当前节点的区域,也就是那些我们插入的区域(假设使用的是矩形)。
如下图:是一个节点的内容:
写成一般的树状图是:
算法描述:
插入一个矩形区域到四叉树中:
1 将当前节点细分,添加四个孩子节点:
2 如果要插入的矩形属于区域某个孩子节点,则递归深入,继续细分该孩子节点。
3 直到该区域不属于任何孩子节点时候,直接存放到当前节点的content数组中。
查询一个矩形区域在四叉树中:
返回所有与该区域相交或者包含的区域,以一个vector的新式。
程序截图:
鼠标左键拖出椭圆,区域同时将这些区域插入到四叉树中:
右键拖出一个白色框选择区域,进行查询:
查询结果为:
这里没法上传文件。具体demo可以到我的资源里下载。
http://download.youkuaiyun.com/source/1239943