2013-02-01 54 views
0

任意長度的矢量I有一個數組:旋轉圓約約一些點x的陣列,Y在Matlab

1 1 1 0 0 
1 2 2 0 0 
1 2 3 0 0 
0 0 0 0 0 
0 0 0 0 0 

我想使它

1 1 1 1 1 
1 2 2 2 1 
1 2 3 2 1 
1 2 2 2 1 
1 1 1 1 1 

它就像旋轉1/4塊餡餅270度,以填滿餡餅的其餘部分,製成一個完整的圓圈。基本上反映所有方向的整個角落。如果可能的話,我不想在構建的matlab功能中使用任何功能 - 只要有可能,只需使用一些向量技巧即可。謝謝。

編輯:

此嵌入任意大小的元素爲零的矩陣內。我希望它在上述兩個示例工作,並說這個例子:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 1 1 1 0 0 0 0 0 0 0 0 0 
0 0 1 2 2 0 0 0 0 0 0 0 0 0 
0 0 1 2 3 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 

理想情況下,我想有一個矢量說[1,2,3 ... N],它被旋轉圓度最高值在數組(N)中,以網格中的某個點xc,yc爲中心。或者如果這是不可能的,請取一個基本數組[1 1 1,1 2 2,1 2 3]並旋轉它,使得3位於中心,然後像上面第二個矩陣中那樣填充一個圓。

編輯:

我發現rot90(M,K)旋轉矩陣M k倍但這生產:

MROT = M + rot90(M,1)+ rot90(M,2)+ rot90 (M,3)

Mrot = 
1 1 2 1 1 
1 2 4 2 1 
2 4 12 4 2 
1 2 4 2 1 
1 1 2 1 1 

這將它堆疊在x,y方向上,這是不正確的。

回答

1

假設你想複製的角落是對稱的(如你的例子),那麼你可以在一個索引步驟中做到這一點。給定一個矩陣M包含您的樣本5乘5矩陣,這裏是如何做到這一點:

>> index = [1 2 3 2 1]; 
>> M = M(index, index) 

M = 

    1  1  1  1  1 
    1  2  2  2  1 
    1  2  3  2  1 
    1  2  2  2  1 
    1  1  1  1  1 
+0

有沒有辦法做到只有三行?即我在某個任意的NxN陣列中有[1 2 3],我想將它繞成圓形,所以它在每個x-y方向上是對稱的? – Griff

+0

只需創建答案中給出的M並將其嵌入到只有0的更大矩陣中。 – thang