簡體   English   中英

兩組 2D 點 (x1,y1), (x2,y2) 之間的最小距離

[英]minimum distance between two set of 2D points (x1,y1) , (x2,y2)

我遇到了標題中描述的問題,我正在使用 MATLAB 2020。

我有 2 組 2D 點,我想找到與所有其他點的距離最小的兩個點(每個點來自不同的集合) min(distance(pi,pj))我做了一些研究(谷歌)並在此 web 頁面中找到了這篇文章:“計算兩個有限平面集之間最小距離的最佳算法”:

計算兩組點之間最小距離的最快算法是什么?

我嘗試使用 MATLAB 和 Garbriel 圖的代碼(我在 google 中找到)來實現該算法:

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

問題是當我運行代碼時,假設是算法與“蠻力算法”(兩個循環),蠻力總是更快......無論我使用了多少點,而且速度更快...這與邏輯(我的)和上面提到的文章相反。

當我檢查代碼行的執行時間時,我發現該行

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

在:

minDistancePoints(p1, varargin) 

是“問題”和建議? 謝謝你

ps讓

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

我想找到 set1 中的 point1 和 set2 中的 point2 與所有其他點的距離最小。

使用隱式展開,我們可以一次計算所有可能的組合,然后在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))

我向p1添加了一個維度: permute(p1,[3,2,1]) ,所以現在我們可以計算這個新的第三維度中的所有組合。

最近的closest_p1給出最小化p2中每個點之間的歐幾里得距離之和的點的索引。 在此示例closest_p1 = 2

還注意到您使用的算法似乎也計算了所有可能的組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM