以下是用于说明问题的图片:
在图片中,有一些特征点显示为蓝色十字。我知道所有功能的坐标(x,y)
。现在我想查询圆形区域内的哪些特征(绿色圆圈)。在实践中,大约有500个特征和300个查询(300个不同的圆,不同的中心和半径)。我知道圆的参数(位置,半径)。有没有什么好的算法可以完成这个任务?
目前我有两个想法。
有没有人有更好的想法?
答案 0 :(得分:3)
最常见的方法是将点放入K-D树或类似树:https://en.wikipedia.org/wiki/K-d_tree
要查找圆内的点,可以按距离中心增加的顺序获得点列表,并在距离超过圆半径时停止。
要按距离增加的顺序获取点列表,可以使用一个优先级队列来保存树的两个点和内部节点,这样就可以按距离的顺序删除它们。
对于点(叶子),距离只是该点距中心点的距离。对于内部节点,距离是从中心点到可能在该节点中的任何点的最小距离。
要搜索,只需将树的根放在优先级队列中,然后重复:
这将按照距中心点的距离增加的顺序产生树中的所有点。