我目前正致力于制作一个NxN圆圈阵列,其中N> 0,在1024 x 1024网格网格内具有不同的圆半径。 n_circles定义数组中的圆数,R是半径。我使用了一个repmat函数来复制数组,具体取决于我选择的圆圈数。这是我的代码:
n_circles = 4 % Define the number of circles to be plotted
n0 = round(1024/n_circles); % Define the size of the basic mask
M0 = zeros(n0); % Initialize the basic mask
I = 1:n0; % Define the x and y coordinates of the basic mask
x = I - n0/2;
y = n0/2 - I;
[X,Y] = meshgrid(x,y); % Create the mask
R = 4; % Define the radius of the basic circle
% Get the indices of the points inside the basic circle
A = (X.^2 + Y.^2 <= R^2);
M0(A) = 1; % Set basic mask
% Replicate basic mask according to the number of circles to be plotted
M=repmat(M0,n_circles,n_circles);
M(2^10,2^10) = 0; % zerofill the rest of the matrix
figure(1)
imagesc(M)
daspect([1 1 1])
imwrite(M,[num2str(n_circles),'array.bmp'])
问题是圆圈没有相互接触,即当我复制它们时,它们彼此相距很远。我需要生成一个彼此接触的圆形2D阵列,半径设置为低值。我在下面附上了一张图片来说明我的担忧。
因此在图片中,圆圈距离它们的中心距离为2半径,圆圈的半径非常小,使得整个2D圆阵列小于整个网格。有人可以帮忙吗?感谢。
答案 0 :(得分:3)
[xx,yy]
将其另存为ind2sub
,因此[x0+xx-R,y0+yy-R]
将是具有中心[x0,y0]
的圈子的索引。sub2ind(size(M),MidX+xx-R,MidY+yy-R)
来获取它的真实索引。(看起来很奇怪,但我只是这样等待更好的答案。) for
循环生成M
中的所有圈子。请注意,如果n_circle
奇数,我们应该做一些数学运算并稍微移动圆圈的中心,以便将所有圆圈保持在图片的中间。
clc; clear;
n_circles = 4; % Define the number of circles to be plotted
R = 4; % Define the radius of the basic circle
Len=400;
M=zeros(Len); % Create the hole mask
% Get the indices of the points inside the basic circle
M0 = zeros(2*R+1); % Initialize the basic mask
I = 1:(2*R+1); % Define the x and y coordinates of the basic mask
x = (I - R)-1;
y = (R - I)+1;
[X,Y] = meshgrid(x,y); % Create the mask
A = (X.^2 + Y.^2 <= R^2);
[xx,yy]=ind2sub(size(M0),find(A == true));
%plot
for ii=1:n_circles
for jj=1:n_circles
MidX=Len/2+(ii-n_circles/2-0.5)*(2*R);
MidY=Len/2+(jj-n_circles/2-0.5)*(2*R);
% [MidX MidY]
M(sub2ind(size(M),MidX+xx-R-1,MidY+yy-R-1))=1;
end
end
figure(1)
imshow(M)
输出图像是:
希望它有所帮助!