Построение сетки квадратов в MATLAB - PullRequest
1 голос
/ 03 января 2012

Я хотел бы построить квадрат в двумерной декартовой системе координат с углами в (±1,±1). Я хотел бы дополнительно разделить его на 400 меньших и равных квадратов с длиной ребра 0.1.

Как я могу сделать это в MATLAB?

Ответы [ 3 ]

2 голосов
/ 03 января 2012

Вы можете создать сетку с правильным количеством вертикальных и горизонтальных линий:

%%
N = 400;
x = linspace(-1,1,sqrt(N)+1)
y = linspace(-1,1,sqrt(N)+1)

% Horizontal grid 
for k = 1:length(y)
  line([x(1) x(end)], [y(k) y(k)])
end

% Vertical grid
for k = 1:length(y)
  line([x(k) x(k)], [y(1) y(end)])
end

axis square
2 голосов
/ 24 августа 2012

Это похоже на проблему, которую мне пришлось решить. Что я делаю ниже, так это получаю координаты всех точек с помощью сетки. Затем я получаю расстояние от каждой точки до любой другой точки с помощью pdist, когда расстояние равно 1, это соединение, которое мы хотим нарисовать. Затем мы строим все эти линии.

%# enter your prerequisites
I=400; R=0.1; N=sqrt(I); M=sqrt(I);

%# create vertices on square grid defined by two vectors
[X Y] = meshgrid(1:N,1:M); X = X(:); Y = Y(:); 

%# create adjacencymatrix with connections between all neighboring vertices
adjacency = squareform( pdist([X Y], 'cityblock') == 1 );

%# plot adjacenymatrix on grid with scale R and origin at the center
[xx yy] = gplot(adjacency, [X Y]); 
xx = xx-round(sqrt(I)/2); %# this centers the origin
yy = yy-round(sqrt(I)/2);
plot(xx*R, yy*R)
1 голос
/ 03 января 2012

См. Функцию rectangle .Например, попробуйте

% Draw large bounding box:
xstart = -1;
ystart = -1;

xlen = 2;
ylen = 2;

rectangle('position', [xstart, ystart, xlen, ylen])

% Draw smaller boxes
dx = 0.1;
dy = 0.1;

nx = floor(xlen/dx);
ny = floor(ylen/dy);

for i = 1:nx
    x = xstart + (i-1)*dx;
    for j = 1:ny
        y = ystart + (j-1)*dy;
        rectangle('position', [x, y, dx, dy])
    end
end
...