我想找到一种快速算法,以便找到平面上给定点的x个最接近点。
实际上,我们处理的点不是太多(在1,000到100,000之间),但是对于每个这些点,我需要x个最接近的点。(其中x通常在5到20之间。)
我需要用C#编写它。
有关用例的更多上下文:这些点是地图上的坐标。(我知道,这意味着我们并不是完全在谈论飞机,但是我希望避免处理投影问题。)在终点附近有许多其他点的地方应该用红色显示,而在其他地方没有太多的点靠近它们的点应显示为绿色。在这两个极端之间,这些点位于颜色渐变上。
您需要的是适合于组织平面中的点的数据结构。在这种情况下经常使用KD- Tree。参见Wikipedia上的kd树。
在这里,我找到了几何算法的一般描述
我将KD树的Java实现移植到C#。请在RoboWiki上查看User:Ojd / KD- Tree。您可以在此处下载代码,也可以直接从我的主页下载 CySoft.Collections.zip (仅下载,不提供文档)。