【问题标题】:How do I get the set of rectangles from a k-d tree?如何从 k-d 树中获取矩形集?
【发布时间】:2012-11-07 12:55:10
【问题描述】:

如果您查看 k-d trees 的 Wikipedia 条目,您会看到将 2D 空间划分为矩形的点和平面的 illustration

我的问题是如何得到矩形的结果集?我认为到叶节点的每条“路径”都可能给我一个界限。对于任意深度的 N 个点,是否有通用的方法来执行此操作?

请注意,我不要求的是超矩形结构的 kd 树,其中给定的输入是一组矩形,然后可以查询这些矩形进行范围搜索等。我的输入是一组随机点,我想要输出“镶嵌”或完全细分笛卡尔空间的一组矩形。

【问题讨论】:

  • 这里好像有两个问题。您是在寻找一种从随机点集构造 k-d 树的算法,还是在给定 k-d 树的情况下枚举分区矩形集的算法?还是两者兼而有之?
  • k-d 树一般不存储矩形,它们存储分割轴。您可以通过编写一小段矩形分割代码来简单地实现这一点,该代码基本上传递一个 2D 矩形,每个节点沿分割轴切割,将 2 个新矩形发送给孩子。

标签: geometry kdtree


【解决方案1】:

感谢 eh9 的编辑。只是为了澄清输入是由一组随机点构成的 k-d 树,输出是一组结果矩形。

感谢 Jerdak 提供的“简单”解决方案: 实际上,只需从根节点开始沿着树向下走,并在每个轴深度处继续分割矩形。唯一的附加信息是原始矩形的外部边界。访问完所有节点后,您可以返回完整的集合。

【讨论】:

    【解决方案2】:

    很多 kD-Trees 实际上存储了每个子树/叶子的边界超矩形,以便在 KNN 搜索中进行更好的修剪。请注意,这些不是覆盖所有空间的矩形,而是在没有任何点的叶子之间留下间隙。我个人认为它们更酷;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多