function [Cir]=ConcreteBone2d_Polygon(Cir,Range,Num,Rmin,Rmax,Ne,da_max,da_min)
Cir = 1;
Range = [0 400;0 100];
Num = 300;
Rmin = 2;
Rmax = 15;
Ne = 2;
da_max = 5;
da_min = 2;
cum = 0;
mn=size(Cir);
while 1
if cum==Num
break;
end
x=rand(1)*(Range(1,2)-Range(1,1))+Range(1,1);
y=rand(1)*(Range(2,2)-Range(2,1))+Range(2,1);
r=rand(1)*(Rmax-Rmin)+Rmin;
if (x-1.05*r>Range(1,1) & x+1.05*r<Range(1,2)) & (y-1.05*r>Range(2,1) & y+1.05*r<Range(2,2))
if mn(1)==0 & cum==0
cum=cum+1;
Cir(cum,:)=[x y r];
else
sum=0;
for j=1:cum+mn(1)
D=sqrt((Cir(j,1)-x)^2+(Cir(j,2)-y)^2);
if D<(Cir(j,3)+r)*1.05
break;
else
sum=sum+1;
end
end
if sum==cum+mn(1)
cum=cum+1;
Cir(cum+mn(1),:)=[x y r];
end
end
end
end
plot([Range(1,:) Range(1,2) Range(1,1) Range(1,1)],[Range(2,1) Range(2,1) Range(2,2) Range(2,2) Range(2,1)],'-b','linewidth',3);
hold on;
h=fill([Range(1,:) Range(1,2) Range(1,1) Range(1,1)],[Range(2,1) Range(2,1) Range(2,2) Range(2,2) Range(2,1)],'w');
set(h,'linewidth',3);
theta=0:5*pi/180:360*pi/180;
for i=1:Num+mn(1)
n=round(3+rand(1)*(Ne-3));
while 1
ang=rand(1,n)*360;
dmax=max(ang)-min(ang);
dmin=360;
for j=1:n
delta=ang-ang(j);
ia=find(delta~=0);
dmin0=min(abs(delta(ia)));
if dmin0<dmin
dmin=dmin0;
end
end
if dmax>=da_max & dmax<=360-da_min & dmin>=da_min
break;
end
end
for k=1:n-1
for p=k+1:n
if ang(p)<ang(k)
a=ang(k);
ang(k)=ang(p);
ang(p)=a;
end
end
end
xx=Cir(i,3)*cos(ang/180*pi)+Cir(i,1);
yy=Cir(i,3)*sin(ang/180*pi)+Cir(i,2);
rr=rand(1,3);
h=fill(xx,yy,rr);
set(h,'edgecolor','k');
end