在MATLAB中,我有一个由有限数量的点表示的XY平面。 x的可能值存储在向量X中,y的可能值存储在另一个向量Y中。我有一个点,比如A,这样A(1)属于X是x坐标和A(2) )属于Y是y坐标。
如果A点在中间,则A点可以以8种方式之一移动:
. . . . A . .
. A . OR . . OR . A
. . . . .
当然,如果A点在边缘上,这些点的集合会发生变化(有时只有5个,如果是角落,有时只有3个)。如何找到这些“单跳”相邻点的集合?那些“k-hop”邻居点怎么样?通过集合,我指的是两个向量,一个用于x坐标,另一个用于y坐标。谢谢!
答案 0 :(得分:1)
请考虑以下代码:
%# create grid of 2D coordinates
sz = [5 6];
[X,Y] = meshgrid(1:sz(2),1:sz(1));
%# point A
A = [1 2]
%# neighboring points
k = 2; %# hop size
[sx,sy] = meshgrid(-k:k,-k:k); %# steps to get to neighbors
xx = bsxfun(@plus, A(1), sx(:)); %# add shift in x-coords
xx = min(max(xx,1),sz(2)); %# clamp x-coordinates within range
yy = bsxfun(@plus, A(2), sy(:));
yy = min(max(yy,1),sz(1));
B = unique([xx yy],'rows'); %# remove duplicates
B(ismember(B,A,'rows'),:) = []; %# remove point itself
A = (1,2)
点k=2
的结果:
B =
1 1
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
以及解决方案的说明:
x A x x . .
x x x x . .
x x x x . .
. . . . . .
. . . . . .
答案 1 :(得分:0)
让我们说A = [Xcenter Ycenter]
对于K-hop,您可以访问点:
pointsX = [];
pointsY = [];
for i=-k:k
pointsX = [pointsX Xcenter+i];
pointsY = [pointsY Ycenter+i];
end
此外,您可以按顺序坐标过滤这些点并删除异常值。例如考虑
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)
现在您知道允许的最小X和Y是1,所以只需用任何纵坐标和/或横坐标过滤掉点。