创建具有特定顺序的网格

时间:2018-10-16 20:15:13

标签: matlab grid

我想创建一个两列20x20网格(x,y),在特定订单上具有0.2分辨率。首先,我知道如何通过每次固定y并如下填充x来创建网格:

 [y, x] = meshgrid(0:0.2:20);
 grid = [x(:) y(:)];

我希望网格进入的顺序如下:

-从y = 0和x = 0开始,固定y并将x增加2,直到到达该x行的结尾。

-将y增加2并重复上述步骤。

-到达网格(20,20)的尽头后,再次从y = 0开始,但x = 0.2并在每次到达x的尽头时将y增加2。

-填完所有这些行后,从y = 0.2和x = 0开始上述操作

分数将按此顺序

  

(0,0)(2,0)(4,0)...(20,0),(0,2)(2,2)(4,2)...(20,2) ,...(0,20)(2,20)   (4,20)...(20,20),(0.2,0)(2.2,0)(4.2,0)...(18.2,0),(0.2,2)(2.2,2)   (4.2,2)...(18.2,2),...(0.2,20)(2.2,20)(4.2,20)...(18.2,20)....   (0,0.2)(2,0.2)(4,0.2)...(20,0.2),(0,2.2)(2,2.2)   (4,2.2)...(20,2.2),...

我知道很难解释,但是这段代码可以解决问题

  grid = [];
   for j = 0:0.2:1.8
   for i = 0:0.2:1.8
      for v = j:2:20
         for u = i:2:20
             x = [u v];
             spot = [grid;x];
         end
      end
   end
end

我也可以做同样的事情,但是从(20,20)开始并从右到左

spot=[];
for j = 20:-0.2:18.2
   for i = 20:-0.2:18.2
      for v = j:-2:0
         for u = i:-2:0
             x = [v u];
             spot = [spot;x];
         end
      end
   end
end

我的第一个问题是,有没有更有效的方式来编写此代码?

第二个问题是,我想将此网格分为两部分。第一部分从(0,0)开始,然后从右向左移动(作为上面的第一个代码),然后从(10,10)停止。第2部分从(20,20)开始,然后从左到右(第二个代码),然后在(10,10)停止。

我现在唯一能做的就是创建上面的网格,然后手动删除不需要的行

2 个答案:

答案 0 :(得分:0)

此解决方案创建相同的网格,但行顺序与网格不同:

z = (0:.2:1.8) + (0:2:20).';
[x y] = ndgrid(z(z<=20));
grid2 = [x(:) y(:)];

要测试网格与当前网格是否相等:

isequal(sortrows(grid2),sortrows(grid))

答案 1 :(得分:0)

这是我的解决方法

x=0:2:20;
y = .2:2:18.2;
[X Y] = meshgrid(x);

%first sequence
seq1 = cat(3,Y ,X);
res1 = reshape(seq1, [],2);

%second sequence
[X2 Y2] = meshgrid(x,y);
seq2 = cat(3,Y2,X2);
res2 = reshape(seq2, [],2);

%third sequence
[X3 Y3] = meshgrid(y, x);  %or use the meshgrid from the previous step
seq3 = cat(3,Y3,X3);
res3 = reshape(seq3, [],2);

%Result
result = [res1;res2;res3];

顺序似乎与问题中给出的一致。

对于第二个问题,如果问题中隐含的顺序是固定的,则(10,10)将是2D数组的第61个元素。因此:

result(1:61);  %will give array values starting from the beginning up to (10,10)

从(10,10)到数组结尾的元素可以用类似的方式计算。

相关问题