我环顾四周,发现了十亿个问题,文章,研究,论文等,但我还无法真正找出或找到该问题的答案。
基本上,我只是想知道从1像素到屏幕本身大小的对象之间进行空间分区/碰撞检测的最佳算法是什么。目前,我倾向于宽松的四叉树。
答案 0 :(得分:1)
首先,看看here。
这取决于您的要求。四叉树非常适合最多100K左右条目的中小型数据集。如果符合您的要求,则无需进一步阅读。
但是,正常的四叉树在处理非常大或高度聚类(在某些区域中为高点密度)数据集时会遇到困难。它们也不是很容易实现,因为对于较大的树,您可能会遇到精度问题(如果您深入一棵树并且象限开始重叠或在它们之间留有空隙,则将数字除以2 30倍)。否则,它们相对容易实现。
我发现PH-Tree非常有用,它有点像四叉树,但是没有精度问题,并且固有地深度有限。以我的经验,这非常快,特别是如果您使用较小的结果集进行窗口查询(这基本上就是您在碰撞检测中所做的事情)。不幸的是,它并不是那么容易实现。上面的链接引用了我自己的Java实现,但该文档还包含一个C ++版本的链接。
您也可以尝试使用'qthypercube2'here,它是具有PH-Tree某些导航技术的四叉树。当前的1.6版本对于极端数据集存在一些精度问题,但是您会发现它非常快,并且已经在解决精度问题。