在matlab中围绕某个点x,y循环旋转任意长度的矢量

时间:2013-02-01 20:35:39

标签: arrays 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],它可以围绕网格中某个点xc,yc的数组(N)中的最高值循环旋转。或者,如果无法做到这一点,请取一个基本阵列[1 1 1 1,2 2 1,2 2]并旋转它,使得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 个答案:

答案 0 :(得分: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