我有一个数组:
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方向,这是不正确的。
答案 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