两组2D点(x1,y1)、(x2,y2)之间的最小距离



我有一个标题中描述的问题,我正在使用MATLAB 2020。

我有两组2D点,我想找到这两个点(每个点来自不同的集合(其与所有其它点CCD_ 1具有最小距离我做了一些研究(谷歌(,发现了这篇文章:"计算两个有限平面集之间最小距离的最优算法";在此网页中:

计算两组点之间最小距离的最快算法是什么?

我尝试使用MATLAB和Garbriel图的代码(我在谷歌上找到的(来实现该算法此处:

http://matgeom.sourceforge.net/doc/api/matGeom/graphs/gabrielGraph.html

问题是,当我运行代码时,假设是算法对";暴力算法";(两个循环(,蛮力总是更快。。。不管我用了多少分,而且速度更快。。。这与逻辑(我的(和上面提到的文章形成了对比。

当我检查代码行的执行时间时,我发现行

dist = dist + (repmat(p1(:,i), [1 n2])-repmat(p2(:,i)', [n1 1])).^2;

in:

minDistancePoints(p1, varargin) 

是";"问题";并提出建议?谢谢

p.s让

set1=random(100,2) 
set2=random(100,2)

我想找到集合1中的点1和集合2中与所有其他点的距离最小的点2。

使用隐式展开,我们可以同时计算所有可能的组合,然后在p1中找到最小化距离总和的点:

p1 =    [0 -1;
2 3;
8 8]
p2 =    [1 1;
2 3;
3 5;
3 3]

[~,closest_p1] = min(sum(sum((permute(p1,[3,2,1])-p2).^2,2).^0.5))

我用permute(p1,[3,2,1])p1添加了一个维度,所以现在我们可以计算这个新的第三维度中的所有组合。

CCD_ 5给出了使CCD_ 6中每个点之间的欧氏距离之和最小化的点的索引。在本例中,closest_p1 = 2

还注意到,您使用的算法似乎也可以计算所有可能的组合。

最新更新