我通過在2D網格中的曲線切割。它隨着時間的推移而向前移動。我在這條曲線(前面)和網格上的節點上都有一組點。在每個時間步驟中,我需要找到曲線上的哪個點(前面)最接近我的網格上的節點。換句話說,對於我的網格中的每個節點,我想知道曲線上的哪個點最接近它。有沒有一個內置的MATLAB函數來搜索這個? (我正在使用MATLAB環境)
在圖中,問題是哪個是最接近任何黃色方塊的黑色圓圈。
我通過在2D網格中的曲線切割。它隨着時間的推移而向前移動。我在這條曲線(前面)和網格上的節點上都有一組點。在每個時間步驟中,我需要找到曲線上的哪個點(前面)最接近我的網格上的節點。換句話說,對於我的網格中的每個節點,我想知道曲線上的哪個點最接近它。有沒有一個內置的MATLAB函數來搜索這個? (我正在使用MATLAB環境)
在圖中,問題是哪個是最接近任何黃色方塊的黑色圓圈。
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_points
與squares
尺寸相同,並存儲每個黃色方塊最近的圓的座標。
非常感謝您的工作。我還發現這個內置函數在MATLAB ** [k,d] = dsearchn(PInterface,X)**中給出了距離d和最接近的圓k的索引:) – Noname
你能舉一些例子代碼,所以我們知道你的變量是什麼樣子? – Lisa
@Lisa,我基本上有黑色圓圈(nX2)矩陣的座標和黃色方塊(mX2)矩陣的座標。最後,我期望得到一個大小矩陣(mX2),其中包含每個黃色方塊(其中m個)最接近黑色圓圈(1X2)的座標。 – Noname