【发布时间】:2012-11-07 12:55:10
【问题描述】:
如果您查看 k-d trees 的 Wikipedia 条目,您会看到将 2D 空间划分为矩形的点和平面的 illustration。
我的问题是如何得到矩形的结果集?我认为到叶节点的每条“路径”都可能给我一个界限。对于任意深度的 N 个点,是否有通用的方法来执行此操作?
请注意,我不要求的是超矩形结构的 kd 树,其中给定的输入是一组矩形,然后可以查询这些矩形进行范围搜索等。我的输入是一组随机点,我想要输出“镶嵌”或完全细分笛卡尔空间的一组矩形。
【问题讨论】:
-
这里好像有两个问题。您是在寻找一种从随机点集构造 k-d 树的算法,还是在给定 k-d 树的情况下枚举分区矩形集的算法?还是两者兼而有之?
-
k-d 树一般不存储矩形,它们存储分割轴。您可以通过编写一小段矩形分割代码来简单地实现这一点,该代码基本上传递一个 2D 矩形,每个节点沿分割轴切割,将 2 个新矩形发送给孩子。