c ++找到一组点中最接近的四个

时间:2014-08-20 17:17:33

标签: c++ k-means nearest-neighbor

我有一组点,每个点都有x和y坐标。我想找到最接近在一起的4个点(如果绘制的所有点都在不同的位置,但这些点中的4个总是彼此更接近,我希望能够识别哪个点这四个点是以编程方式)。我该怎么做呢?我被告知它与k-means或最近邻居有关,但从我的搜索结果到目前为止,我看不出我怎么能让它为我的情况工作,因为我发现了点的接近度相对于彼此而不是某个固定点。任何有关要查看的主题/算法或代码片段的建议都将非常受欢迎。

我认为确切问题的图像可能有所帮助。所以这8个点都包含在一个向量中,我希望能够识别哪四个是右边聚类的那些。

enter image description here 提前谢谢。

2 个答案:

答案 0 :(得分:1)

蛮力方法是选择四个点(每个排列)的每个可能选择并计算例如: 1)点所包围的区域, 2)点的凸包的周长, 3)...... 你可以通过1),2)或3)得到的最小值来找到你的四个点。

答案 1 :(得分:0)

在nlog(n)复杂度中构建Delaunay三角剖分图,为了找到四个最短的边,将会有不到2n个边。 你可以试试poly2tri。 你想要越过这样的边缘:选择一条边,对最短的连接边进行三次,然后对边长进行求和。保存顶点和到目前为止遇到的最小边总和的长度和,并耗尽所有可能的最短邻近长度组合。