C++找到一组点的最接近四

C++找到一组点的最接近四,c++,k-means,nearest-neighbor,C++,K Means,Nearest Neighbor,我有一组点,每个点都有x和y坐标。我想找到其中4个最接近的点,如果绘制的话,所有的点都会在不同的位置,但其中4个点总是彼此更接近,我想能够通过编程识别这4个点中的哪一个。我该怎么做呢?我被告知它与k-means或最近邻有关,但从我目前的搜索结果来看,我不知道如何让它在我的案例中起作用,因为我在寻找点之间的相对接近度,而不是某个固定点。任何关于研究主题/算法或代码片段的建议都将不胜感激 我认为准确的问题图像可能会有所帮助。这8个点包含在一个向量中,我想能够识别哪四个是右边聚集的 提前感谢。蛮力法

我有一组点,每个点都有x和y坐标。我想找到其中4个最接近的点,如果绘制的话,所有的点都会在不同的位置,但其中4个点总是彼此更接近,我想能够通过编程识别这4个点中的哪一个。我该怎么做呢?我被告知它与k-means或最近邻有关,但从我目前的搜索结果来看,我不知道如何让它在我的案例中起作用,因为我在寻找点之间的相对接近度,而不是某个固定点。任何关于研究主题/算法或代码片段的建议都将不胜感激

我认为准确的问题图像可能会有所帮助。这8个点包含在一个向量中,我想能够识别哪四个是右边聚集的


提前感谢。

蛮力法是在每个排列中选择四个点的每个可能选择,并计算例如: 1点包围的区域, 2点的凸包的周长, 3.
通过得到由1、2或3计算出的最小值,您将找到四个点。

在nlogn复杂度中构建一个Delaunay三角剖分图,为了找到四条最短的边,将有不到2n条边。 你可以试试。
您可能希望像这样遍历边:选择一条边,遍历三次到最短的连接边,然后求边长度之和。保存到目前为止遇到的最小边和的顶点和长度和,并用尽所有可能的最短相邻长度组合。

如何定义彼此最接近的长度?四个一组中每对点之间的距离之和?4,7真的是固定的吗?在这种情况下,可能只有35组点,检查这些暴力是绝对可行的。只有n越高,它才会成为一场噩梦。@Cameron-如果你在窗口中可视化点,你会注意到包含四个点的区域的点密度越大,集中的其余点总是远离这个密集区域。@AlexanderGessler-7不是固定的,但是,当可视化时,这四个集合总是更紧密地联系在一起。你可能想要研究计算拓扑和数据可视化。我模模糊糊地记得有一件事与此相关,那就是在两个点相距小于一定距离时相邻的图中寻找贝蒂数的问题。面积可能是个坏主意,然后,4个共线点的距离为0,无论它们相距多远。包含或包围所有4个点的圆的最小半径是另一种可能measure@MattMcNabb-事实证明这个问题比我想象的要难解决得多。根据你所说的,我想我可以使用opencv的MineConclosingCircle来绘制一个固定半径的圆,我知道这8个点中的每一个都是一个圆的中心。对于感兴趣的4个点,因为它们靠得更近,它们的每个圆将包含其他三个点,但其他不需要的4个点将始终单独存在于它们的圆中。听起来怎么样?你不必以一个点为中心,这可能是次优的。事实上,如果你用马丁建议的每一个4点的凸包,然后考虑它的两个对角线的长度作为测量值,我想这可能相当于我的建议。谢谢你的建议,Mr.WorshipMe。这听起来像是可行的。我现在正在研究算法和poly2tri,我将试一试。@Stralo祝你好运,如果这解决了你的问题,请将其标记为: