0

我有一个数组:

 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 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 方向上。

4

1 回答 1

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
于 2013-02-01T20:43:08.403 回答