Одним из решений является использование патчей, например, следующим образом:
% set up example array
xl = 24; yl = xl;
[X Y] = find(hadamard(xl)==1);
% generate figure
figure, hold on
for ii=1:length(X)
patch(X(ii) + [0 0 1 1],Y(ii) + [0.1 0.9 0.9 0.1],[1 1 1],'Edgecolor',[1 1 1])
end
axis([0 xl+1 0 yl+1])
axis('square')
Команда патч patch(x,y, color)
принимает вершины элемента многоугольника как x
и y
. В этом примере вы можете изменить термин [0.1 0.9 0.9 0.1]
, чтобы установить толщину ограничивающей черной линии.
Это создает
Под редакцией
Для конкретного экземпляра, представленной OP:
H=Hadamard(48); %# now to row-double the matrix
A=(1+H)/2;
B=(1-H)/2;
C=[A; B]; %# the code below randomly permutes elements within the rows of the matrix
[nRows,nCols] = size(C);
[junk,idx] = sort(rand(nRows,nCols),2); %# convert column indices into linear indices
idx = (idx-1)*nRows + ndgrid(1:nRows,1:nCols); %# rearrange whatever matrix
E = C;
E(:) = E(idx);
[X Y] = find(logical(E));
xl = length(X);
yl = length(Y);
figure, hold on
for ii=1:xl
rectangle('Position',[X(ii) Y(ii)+.2 1 0.8],'facecolor',[1 1 1],'edgecolor',[1 1 1])
end
axis([0 max(X)+1 0 max(Y)+1])
axis('square')
set(gca,'color',[0 0 0])
set(gca,'XTickLabel',[],'YTickLabel',[],'XTick',[],'YTick',[])
В этом примере используется rectangle
вместо пластыря, чтобы генерировать острые углы.
Изображение:
Спасибо @R. Bergamote. Тем не менее, ваш код не работал, но он дает мне о чем подумать. Мне действительно нужно больше узнать о Matlab в целом, и это помогает увидеть различные функции в контексте. – StrugglingGradStudent