我正在根据 Guttman 的原始论文编写 R-Tree 的实现。我正在考虑将 R-Tree 用于我正在编写的程序,该程序涉及屏幕上的许多矩形,这些矩形可以用鼠标移动/调整大小。
我只想有效地选择特定矩形中的矩形并绘制它们(而不是遍历可能的 100 多个项目并检查边界是否相交)。在阅读了几篇 Guttman 的论文后,我发现的问题是无法为 2D 对象维护 z 顺序。
例如,如果我移动一个对象,它将被删除然后重新插入。当它重新插入时,它插入的节点将无法跟踪正确的顺序。我见过的大多数 R-Tree 实现都使用数组并找到空位置。重新插入基本上会破坏任何 z 顺序定位。
因此,当我绘制与矩形相交的所有矩形时,它们返回的顺序不一定正确。
我在这个假设上错了吗?我在想而不是使用数组,我可以使用 AVL 或红黑树并使用Comparer
在 z-index 上进行比较的 a 插入到树中。这样,z 顺序始终保持不变(这是最重要的因素)。
我也只是想在它们返回时对其进行分类,但我想这可能会更贵。