我有一个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