我有一个标题中描述的问题,我正在使用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
。
还注意到,您使用的算法似乎也可以计算所有可能的组合。