0

在 MATLAB 中,我有一个由有限数量的点表示的 XY 平面。x 的可能值存储在向量 X 中,y 的可能值存储在另一个向量 Y 中。我有一个点,比如 A,这样 A(1) 属于 X 是 x 坐标,A(2 ) 属于 Y 是 y 坐标。

如果 A 点在中间,它可以以 8 种方式之一移动:

          .   .   .                      .   A                .    .

          .   A   .        OR            .   .       OR       .    A

          .   .   .                                           .     .

当然,如果点 A 在边上,这些点的集合会发生变化(有时只有 5 个,有时如果是角,则只有 3 个)。如何找到这些“1-hop”相邻点的集合?那么“k-hop”相邻点的集合呢?集合是指两个向量,一个用于 x 坐标,另一个用于 y 坐标。谢谢!

4

2 回答 2

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 . .
. . . . . .
. . . . . .
于 2012-06-21T07:16:56.217 回答
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,因此只需过滤掉任何纵坐标和/或横坐标小于该值的点。

于 2012-06-21T01:56:28.150 回答