我正在寻找一种数据结构,可以管理矩形对象(O LxH)的数据以及矩形对象的所有细分(内部分区)。
应该能够添加更多分区,以及访问现有分区。应将每个分区视为另一个矩形对象(O LxH)。
我以为我可以使用BSP树,但我认为这可能是解决我问题的过于复杂的解决方案。
图中的示例
分区'B'应该是另一个具有原点,长度和高度的对象。
答案 0 :(得分:0)
我说你肯定需要某种树。
您提到您担心BSP树可能因此问题而过于复杂 - 这取决于您需要解决方案的强大程度。您可能还想考虑是否可以将对象分区为两个以上 - 如果没有,则可以使用二叉树。
基本上,树中的每个节点都有一个大小和形状,以及子(分区)节点。此外,节点将负责确保其子项的大小和形状有意义 - 即它们不重叠,它们填满整个父项,它们不会超出父项。
访问分区可以通过为每个节点提供相对于其父节点的相对id来完成。第一个孩子获得relativeID = 0
,第二个孩子获得1等。对每个级别的每个节点的孩子重复此操作。然后你可以编写一个方法来获取相对ID的列表,并使用它来遍历树并找到正确的分区(每个级别剥离一个相对ID,以便移动到下一个级别)。
答案 1 :(得分:0)
基本实现是
struct Node
{
vector<Node*> vChildNodes;
double x0,y0,x1,y1;
};
...通常你需要添加递归split() - 和locate() - 方法。
您尝试实施的内容与Quadtree类似 - 请参阅http://en.wikipedia.org/wiki/Quadtree或kd-tree http://en.wikipedia.org/wiki/K-d_tree。您可以尝试现有的实现。