【发布时间】:2015-06-10 13:01:44
【问题描述】:
我有一个如下所示的 2D 网格,想从 X、Y 开始并保存窗口的角 (W) 和 (OP) 的重叠。我已经尝试过these 代码,但它们都不符合我的目的。
正如演示的那样,我想从一个随机点(黑色单元格)开始,并将每个新窗口的角位置(由黑色圆圈显示)保存在一个螺旋循环中。该算法应该用于任何网格大小(不一定是正方形)和任何起点位置。
Matlab 也有一个函数(螺旋),和我想要的类似,但它不需要网格、窗口大小和重叠(OP)。
我希望这个数字有以下输出:(8,12) (11,12) (11,9) (8,9) (4,9) (4,12) (4,15) ...
我正在使用以下代码,它从一个角落开始,使用定义的 W、OP 和矩阵大小逐步填充矩阵:
W = [10 12];
OP = [4 3];
M = zeros(100,110);
for i=[1:W(1)-OP(1):size(M,1)-W(1), size(M,1)-W(1)+1]
for j=[1:W(2)-OP(2):size(M,2)-W(2), size(M,2)-W(2)+1]
block = rand(W(1),W(2));
M(i:i+W(1)-1, j:j+W(2)-1) = block;
imagesc(M); axis equal tight xy
pause(.1)
end;
end;
所以,以更清晰的方式,我应该如何更改“上方”代码以便从位置(x,y)开始并根据 W、OP 和大小(M)螺旋填充整个矩阵。
谢谢!
【问题讨论】:
-
图很不清楚。我不知道您要保存哪些位置。
-
您能否使用最少的样本输入数据并告诉我们预期的输出?此外,重叠区域的宽度可能不止一个元素,对吧?
-
我编辑了这个问题。是的,OP 可以是多个元素。
-
我在文档中看不到任何
spiral函数。你有参考吗? -
@Sam:我假设您的示例应该是
(8,12) (11,12) (11,9) (8,9) (5,9) (5,12) (5,15),所以步长总是 3?
标签: arrays matlab loops matrix