2016-02-18 47 views
0

enter image description here查找曲線上的點,這是最接近指定點

我通過在2D網格中的曲線切割。它隨着時間的推移而向前移動。我在這條曲線(前面)和網格上的節點上都有一組點。在每個時間步驟中,我需要找到曲線上的哪個點(前面)最接近我的網格上的節點。換句話說,對於我的網格中的每個節點,我想知道曲線上的哪個點最接近它。有沒有一個內置的MATLAB函數來搜索這個? (我正在使用MATLAB環境)

在圖中,問題是哪個是最接近任何黃色方塊的黑色圓圈。

+0

你能舉一些例子代碼,所以我們知道你的變量是什麼樣子? – Lisa

+0

@Lisa,我基本上有黑色圓圈(nX2)矩陣的座標和黃色方塊(mX2)矩陣的座標。最後,我期望得到一個大小矩陣(mX2),其中包含每個黃色方塊(其中m個)最接近黑色圓圈(1X2)的座標。 – Noname

回答

2

Here是一種有效的函數來計算的成對距離:

function D = sqDistance(X, Y) 
    D = bsxfun(@plus,dot(X,X,1)',dot(Y,Y,1))-2*(X'*Y); 
end 

假設circles是黑色圓圈的座標和squares如您所描述的黃色方格的座標,則可以執行以下操作:

% example matrices 
circles = rand(5,2); 
squares = rand(8,2); 

D = sqDistance(squares', circles');  
[~,idx] = sort(D, 2) 

closest_points = circles(idx(:,1),:) 

closest_pointssquares尺寸相同,並存儲每個黃色方塊最近的圓的座標。

+0

非常感謝您的工作。我還發現這個內置函數在MATLAB ** [k,d] = dsearchn(PInterface,X)**中給出了距離d和最接近的圓k的索​​引:) – Noname