• 大乌鸦abcd
    了解作者
  • matlab
    开发工具
  • 134KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 43
    下载次数
  • 2019-06-08 17:56
    上传日期
可以生成随机混凝土二维模型,里面附了生成的图,可以看看
二维随机骨料模型.rar
  • ceshi.jpg
    151.8KB
  • Concrete.m
    1.5KB
内容介绍
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
评论
    相关推荐