在KD树中存储矩形/圆/三角形

时间:2013-07-15 09:44:19

标签: c# algorithm kdtree

我正在查看Kd-tree并发现了该算法的一些实现。所有这些都是存储点(主要情况下为2d)。我想要实现的是在矩形,三角形等中存储不同的形状。在kd-tree中存储形状是否可能?我有一些Quad-trees的代码。因为存储了形状。

3 个答案:

答案 0 :(得分:2)

这与Quad树的方法没有什么不同。

对于每个形状,您应该能够计算:

  • 它的质心。

  • 信封。

计算中位数时,请使用质心。形状的包络应该适合四边形。在四边形中插入形状时,请检查其包络是否穿过超平面。如果为true,则将形状存储在四边形中。如果为false,请将此形状放在左侧或右侧四边形的相应形状列表中 建设电话。

干杯

答案 1 :(得分:2)

一旦你有了kd-tree,这取决于你想要用你的形状集做什么。假设您有一组矩形,并且想要快速查找完全包含在查询矩形中的所有矩形。然后使用kd树(或者更好的是,范围树imo)的适当方式是将矩形的min和max x和y坐标存储为4维点,并为4维点构建树。然后,对于查询矩形(a0,a1)x(b0,b1),使用树在4维点上使用范围(a0,+ inf)x(-inf,a1)x进行范围查询(b0,+ inf)x(-inf,b1)。

答案 2 :(得分:1)

这是KD树的自然延伸。

如果您的树中只有积分:

  • 树中的节点对应于空间区域
  • 给定父节点P和子节点C1,C2,...,CN,子节点Ci是相互不相交的并且它们是分区P
  • 每个点x都出现在树的恰好一个叶节点中

树中有卷时:

  • 树中的节点对应于空间区域
  • 给定父节点P和子节点C1,C2,...,CN,子节点Ci是相互不相交的并且它们是分区P
  • 每个卷v都存在于树的至少一个叶节点中(它位于与其相交的任何叶节点中)