世界由许多相似大小的(1k-10k)矩形组成,我需要能够在尝试添加新矩形时快速确定潜在的重叠。将动态添加和删除矩形。 R树是否合适?如果是这样,我应该考虑哪些好的库? (我愿意接受任何语言的建议。)
答案 0 :(得分:3)
R-Trees适合,是的。
quad trees 也是一种很好的数据结构,可以快速查找2D空间区域中的对象。它们实际上是r树的更统一版本。使用这些结构,您可以快速归零一小块空间,只需很少的测试,即使使用大量数据集也是如此。
有一个c#实现here,虽然我没有看过它。
这种数据结构(以及它的3D版本称为Octrees)通常用于游戏中,以管理需要知道它们是否靠近任何其他对象进行碰撞测试的大型数据集,以及所有其他有趣的原因。
您应该能够在游戏行业网站上找到大量有关这类数据结构的文章和示例,例如gamasutra和opengl.org
答案 1 :(得分:1)
您还可以查看kd-trees。
我不知道任何实现,但在3D中,至少它们通常被认为比Octrees更高效。例如,这是经验回报I just googled it。
如果遇到性能问题,您可能需要考虑替代四叉树。
但是应该注意kd树很难重新平衡......