MATLAB在XY平面中移动一个点

时间:2012-06-20 20:17:35

标签: matlab

在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坐标。谢谢!

2 个答案:

答案 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,所以只需用任何纵坐标和/或横坐标过滤掉点。