这些四树图书馆中的任何一个都不错吗?

Noc*_*wer 16 python performance quadtree

似乎我的某个项目需要使用四叉树,这是我以前从未使用过的.从我所看到的,他们应该允许大量的性能增强,而不是蛮力尝试解决问题.这些python模块中的任何一个都不错吗?

编辑1:有没有人知道比pygame wiki中提供的更好的实现?

编辑2:以下是其他人可能会发现Python中的路径寻找技术有用的一些资源.

Rob*_*lak 14

这篇评论中,joferkington提到了当前的问题并说:

只是为了它的价值,scipy.spatial.KDTree(和/或scipy.spatial.cKDTree,出于性能原因用C语言编写)是一个比列出的选项更强大的选择.

  • 公平地说,如果可以选择安装 scipy,scipy.spatial.KDTree 只是一个更好的解决方案。可能不是(scipy 有一些有趣的依赖项)。 (2认同)
  • 请注意,scipy 的 KDTree 面向集群用例,并且还具有一些对于非科学家来说不太明显的术语。例如,想要在树中查询 AABB 中的所有点?那么你当然需要使用 `query_ball_point` 和 `p=1` (:但是你仍然不能输入你自己的盒子形状(它总是一个“球体”)。也不支持动态更新。这很好代码,但与其他解决方案相比,可能需要更多的工作来理解并从中获取您想要的内容。 (2认同)

Kar*_*gat 5

另一个需要检查的库是PyQuadTree,它是一个纯Python四叉树索引,也可以在Python 3x上使用。您需要添加的项目是它的边界框(长度为4个长度),因此可以用于多种目的,甚至可以使用负坐标系。

尽管我是作者,但实际上我只是采用了其他人的四叉树结构/代码,使其更加用户友好,增加了对矩形四边形的支持,并增加了文档。一个简单的用法示例:

#SETUP
import pyqtree
spindex = pyqtree.Index(bbox=[0,0,1000,500])

#ADD SOME ITEMS
for item in items:
    spindex.insert(item=item, bbox=item.bbox)

#RETRIEVE ITEMS FROM A REGION
result = spindex.intersect(bbox=[233,121,356,242])
Run Code Online (Sandbox Code Playgroud)