如图设置一个网格大小为256*256的点阵;
vr为圆形面积占总面积的比例;
r为圆形半径;
k1为圆外数字;
k2为园内数字;
需要生成n个不重叠的圆形数字矩阵,且圆形面积服从正态分布。(可以自定义k1和k2数字大小)
最后将其输出为txt文件,且一个数字为一行。
我原来写的是下面这样,所有的圆形都是相同半径
function producestructure()
clc;
clear all;
nx=256;
ny=256;
p=zeros(nx,ny);
vr=0.04;
nxy=nx*ny;
hn=nxy*vr;
nh=11;
rr=((hn/nh)/pi)^0.5;
km=1;
kh=0.048; %圆内
distt=8;
nk=1;
bddis=10;
for n=1:1:10000
x0=floor(rr+bddis+ (nx-2*rr-2*bddis)*rand);
y0=floor(rr+bddis+ (ny-2*rr-2*bddis)*rand);
if(n==1)
hc(nk,1)=x0;
hc(nk,2)=y0;
end
tr=1;
if(n>1)
for i=1:1:nk
D=((x0-hc(i,1))^2+(y0-hc(i,2))^2)^0.5;
if(D<(2*rr+distt))
tr=0;
end
end
end
if(tr>0)
nk=nk+1;
hc(nk,1)=x0;
hc(nk,2)=y0;
disp([x0 y0])
end
if(nk==nh) break; end
end
if(nk==nh)
p=p+km;
for k=1:1:nh
for m=1:1:ny
for n=1:1:nx
D=((n-hc(k,1))^2+(m-hc(k,2))^2)^0.5;
if(D<rr)
p(m,n)=kh;
end
end
end
end
pcolor(p);
shading interp;
else
disp(['please change dis for more point']);
end
fn=fopen('k.txt','w');
for m=1:1:ny
for n=1:1:nx
fprintf(fn,'%f\n',p(m,n));
end
end
fclose(fn) ;
df=0.01*(diff(p,2,2)+diff(p,2,1));
size(df)