什么是用于管理正方形的几何细分的适当数据结构?

时间:2011-11-11 17:01:05

标签: computational-geometry

我正在寻找一种数据结构,可以管理矩形对象(O LxH)的数据以及矩形对象的所有细分(内部分区)。

应该能够添加更多分区,以及访问现有分区。应将每个分区视为另一个矩形对象(O LxH)。

我以为我可以使用BSP树,但我认为这可能是解决我问题的过于复杂的解决方案。

图中的示例

enter image description here

分区'B'应该是另一个具有原点,长度和高度的对象。

2 个答案:

答案 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。您可以尝试现有的实现。