2012-06-20 61 views
0

在MATLAB中,我有一個由有限個點表示的XY平面。 x的可能值存儲在一個向量X中,y的可能值存儲在另一個向量Y中。我有一個點,比如A,使得A(1)屬於X是x座標,A(2 )屬於Y是y座標。MATLAB在XY平面上移動一個點

這點A可以在8中的一個方式移動,如果它是在中間:

  . . .      . A    . . 

      . A .  OR   . .  OR  . A 

      . . .           .  . 

當然,該組的這些點的變化,如果點A是在邊緣(有時僅5,有時只有3個,如果它是一個角落)。我怎樣才能找到這些「1跳」鄰近點的集合?那麼「k-hop」相鄰點的集合呢?我的意思是兩個矢量一個用於x座標,另一個用於y座標。謝謝!

+0

是本次作業? – slayton

+0

不,實際上我試圖模擬網絡中的某些東西,我需要繼續。 – Alex

+0

確定沒問題,你的描述聽起來像家庭作業-Y – slayton

回答

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 . . 
. . . . . . 
. . . . . . 
+0

謝謝你的工作! – Alex

0

可以說A = [Xcenter Ycenter]

爲K-一跳,可以接入點:

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,所以只是過濾掉點與任何座標和/或低於橫座標較小。

+0

提示:使用'{}'標籤很好地對代碼進行格式化(或者在每行之前添加4個空格以便手工完成)。 – tmpearce

+0

謝謝。這不完全是我需要的,但它是一個很好的開始:) – Alex