我有一個n維點,並且想要獲得距離r的所有鄰域。使用matlab獲得距離r的點x的所有鄰域
我知道matlab有rangesearch()來獲得候選集合中距離r的鄰域,但在我的問題中,我沒有候選集合。
有沒有任何matlab代碼可以完成這項工作?
謝謝!
我的意思是我想創建這個球內的點的子集。例如,我有一個點(3,1),半徑r是5,所以我想找到點5(3,1)中r的所有點。在這種情況下,增量爲1,這意味着可能的答案可能是點(4,1),(3,2),(5,1)...我是否讓自己清楚?
我有一個n維點,並且想要獲得距離r的所有鄰域。使用matlab獲得距離r的點x的所有鄰域
我知道matlab有rangesearch()來獲得候選集合中距離r的鄰域,但在我的問題中,我沒有候選集合。
有沒有任何matlab代碼可以完成這項工作?
謝謝!
我的意思是我想創建這個球內的點的子集。例如,我有一個點(3,1),半徑r是5,所以我想找到點5(3,1)中r的所有點。在這種情況下,增量爲1,這意味着可能的答案可能是點(4,1),(3,2),(5,1)...我是否讓自己清楚?
您可以使用ndgrid
創建候選集。在你的二維實例中,你想要一個間距爲1的網格點。
xrange = -10:10;
yrange = -10:10;
[X, Y] = ndgrid(xrange, yrange);
這產生兩個點的二維矩陣。爲了得到它進入期望的格式通過rangesearch
:
candidate_set = [X(:), Y(:)];
然後你就可以調用rangesearch
找出哪些是你的選擇點的範圍內:
test_pt = [3, 1];
radius = 5;
idx = rangesearch(candidate_set, test_pt, radius);
這將返回一個單元陣列(每個測試點都有一個元素)。在你的情況,你只有一個測試點,所以我們只在idx{1}
感興趣:
neighborhood = candidate_set(idx{1}, :);
還要說明一點:我們可以更聰明一點關於產生候選集。我們知道,這個地區將通過各地的測試點爲中心的超立方體來界定,所以我們可以通過在超立方體作爲候選組使用方面着手:
range_min = test_pt - radius;
range_max = test_pt + radius;
,然後我們可以構建從候選集此範圍:
xrange = ceil(range_min(1)):floor(range_max(1));
yrange = ceil(range_min(2)):floor(range_max(2));
[X, Y] = ndgrid(xrange, yrange);
candidate_set = [X(:), Y(:)];
在尺寸的任意數量的:
nDims = length(test_pt);
grid_vecs = cell(nDims, 1);
grid_mats = cell(nDims, 1);
for ii = 1:nDims
grid_vecs{ii} = ceil(range_min(ii)):floor(range_max(ii));
end
[grid_mats{:}] = ndgrid(grid_vecs{:});
for ii = 1:nDims
grid_mats{ii} = grid_mats{ii}(:);
end
candidate_set = horzcat(grid_mats{:});
非常感謝!這正是我想要的! – user1964417 2014-11-27 04:36:58
該社區是圍繞點爲中心半徑爲r的球。 'rangesearch'返回這個球內給定點的子集。所以如果你沒有一個候選人,你的意思是「獲得所有的鄰居」? – KQS 2014-11-22 00:16:49
@ user1877862我的意思是我想創建這個球內的點的子集。例如,我有一個點(3,1),半徑r是5,所以我想找到點5(3,1)中r的所有點。在這種情況下,增量爲1,這意味着可能的答案可能是點(4,1),(3,2),(5,1)...我是否讓自己清楚? – user1964417 2014-11-23 15:54:16