在一组四叉树中找到最佳深度/范围以优化边界框中点的检索

Posted

技术标签:

【中文标题】在一组四叉树中找到最佳深度/范围以优化边界框中点的检索【英文标题】:Finding the optimal depth/ranges in a set of quad trees to optimize retrieval of points in bounding box 【发布时间】:2014-02-13 02:43:52 【问题描述】:

如果我有一组四叉树(比如在希尔伯特曲线上),那么在特定深度找到最佳(或足够好)的一组范围是一种好方法。

例如,如果我正在搜索边界框 0,0 和 1,3 之间的点,那么我可以应用以下简单范围:

深度 1 - 范围 0,0-1,0(~33% 搜索空间) 深度 2 - 范围 0,0-1,0 和 1,0-0,1(~13% 搜索空间) 深度 3 - 范围 0,0-1,0 和 1,3-0,3 (~9.8% 的搜索空间)

显然深度 3 对这个搜索来说是最佳的,但是与从深度 1 到深度 2 的下降相比,缩小的搜索空间只下降了一小部分。

在(大得多的)深度或跨边界搜索时,是否有一种好的算法可用于估计不同深度之间的差异,或者理想情况下选择不同深度的范围组合以理想地覆盖边界框。

我对多边形不感兴趣,但如果有适用于多边形的解决方案,我会加分。

【问题讨论】:

我完全不明白。四叉树将适应您的点的拓扑结构,所以我看不出您如何为同一组点拥有 3 个不同的四叉树。我也不了解您在 3 个深度示例中使用的坐标系。也许您所指的技术如此明显以至于不需要解释,但在这种情况下,我宁愿有几个关键字来为 Google 提供信息并尝试自我教育。 至少有8个不同的四叉树,所以请具体说明它是点四叉树还是对象(边界)基,还是线基四叉树? MX-quad、MX-cif、PM、PMR-quad?它是基于桶的四边形吗?是否使用希尔伯特曲线/索引将四边形转换为线性数组? 【参考方案1】:

尽管您的问题需要更多细节,但需要一些答案:

您可以通过 log4(N) 来估计四边形的深度。 (取元素个数N的以4为底的对数。)

根据四叉树的类型,您可以将最大深度限制为该数字。

插入元素的顺序会影响四边形的结构。 在插入之前对数据进行预排序可以改进一点四边形结构。预排序的类型取决于四边形。如果您使用希尔伯特备份四边形,您可以按希尔伯特索引对数据进行预排序。

【讨论】:

【参考方案2】:

当您使用希尔伯特曲线时,它是空间索引,而不是四叉树。四叉树也有一些限制,例如您可以存储多少点。因此,在希尔伯特曲线上最好使用小图块,这样边界框就可以很好地拟合。

【讨论】:

通常可以使用莫顿索引或希尔伯特曲线将四叉树转换为线性数组。

以上是关于在一组四叉树中找到最佳深度/范围以优化边界框中点的检索的主要内容,如果未能解决你的问题,请参考以下文章

单目稠密深度图(vins mono可用)

Mark四叉树与八叉树

用于二维碰撞检测的四叉树

uva297

四叉树空间索引原理及其实现

四叉树空间索引原理及其实现