我正在查看 Kd-tree 并找到了该算法的一些实现。所有这些都是存储点(主要是 2d)。我想要实现的是在其中存储不同的形状,如矩形、三角形等。那么在 kd-trees 中是否可以存储形状?我有一些四叉树的代码。在那个形状被存储。
问问题
3470 次
3 回答
3
这与用于四叉树的方法没有太大区别。
对于每个形状,您应该能够计算:
它的质心。
它的信封。
计算中位数时,使用质心。形状的包络应该适合四边形。在四边形中插入形状时,检查其包络是否穿过超平面。如果为真,则将形状存储在四边形中。如果为假,则将此形状放入左或右四边形构造调用的适当形状列表中。
干杯
于 2013-07-15T12:47:22.407 回答
2
这取决于一旦你有你的 kd-tree,你想对你的形状集做什么。假设您有一组矩形,并且您想快速找到完全包含在查询矩形中的所有矩形。然后使用 kd-tree(或者更好的是,范围树 imo)的适当方法是将矩形的最小和最大 x 和 y 坐标存储为 4 维点,并为 4 维点构建树. 然后,对于查询矩形 (a0,a1)x(b0,b1),您使用树对 4 维点使用范围 (a0,+inf) x (-inf, a1) x 进行范围查询(b0, +inf) x (-inf, b1)。
于 2013-07-15T15:57:09.613 回答
1
这是 KD 树的自然扩展。
当您的树中只有点时:
- 树中的节点对应于您空间的区域
- 给定一个父节点 P 和子节点 C1, C2, ..., CN,子节点 Ci 互不相交,它们划分 P
- 每个点 x恰好存在于树的一个叶节点中
当树中有卷时:
- 树中的节点对应于您空间的区域
- 给定一个父节点 P 和子节点 C1, C2, ..., CN,子节点 Ci 互不相交,它们划分 P
- 每个卷 v 都存在于树的至少一个叶节点中(它“在”与它相交的任何叶节点中)
于 2013-07-15T17:58:22.153 回答