|
原先写过一个限制位置和圆大小的随机画圆程序:
- function RandomPlotCircle(Lxmin,Lxmax,Lymin,Lymax,Rmin,Rmax,n,Factor)
- & This Programm made by Bainhome
- & Date:Mar.22th 2006
- & First Edited in Mar.23th 2006
- % ********************************** 输 * 入 * 变 * 量 * 介 * 绍 **********************************
- % Lmin,Lmax——The Bound of Circle Plot Area (Both X dir & Y dir)
- % Rmin,Rmax——The Limitation of Radius
- % Example:RandomPlotCircle(1,10,1,10,.1,2,10)
- % ***************************************** 完 * 毕 ***************************************************
- close all
- clc
- count=0;
- Lxmin=Lxmin+Rmax;
- Lxmax=Lxmax-Rmax;
- Lymin=Lymin+Rmax;
- Lymax=Lymax-Rmax;
- R1(1)=Rmin+rand*(Rmax-Rmin);
- RT(1)=R1(1);
- x1(1)=Lxmin+rand*(Lxmax-Lxmin);
- y1(1)=Lymin+rand*(Lymax-Lymin);
- for i=1:1
- if x1(i)+R1(i)<=Lxmax&x1(i)-R1(i)>=Lxmin&y1(i)+R1(i)<=Lymax&y1(i)-R1(i)>=Lymin
- else
- R1(i)=Factor*R1(i);
- while x1(i)+R1(i)>Lxmax|x1(i)-R1(i)<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
- R1(i)=Factor*R1(i);
- end
- end
- if R1(i)>Rmin
- rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- else
- count=count+1;
- R1(i)=0;
- end
- end
- for i=2:n
- R1(i)=Rmin+rand*(Rmax-Rmin);
- RT(i)=R1(i);
- x1(i)=Lxmin+rand*(Lxmax-Lxmin);
- y1(i)=Lymin+rand*(Lymax-Lymin);
- if x1(i)+R1(i)<=Lxmax&x1(i)-R1(i)>=Lxmin&y1(i)+R1(i)<=Lymax&y1(i)-R1(i)>=Lymin
- Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
- SumR=R1(i)+R1(1:i-1);
- if all(Disp./SumR>1)
- if R1(i)>Rmin
- rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- else
- count=count+1;
- R1(i)=0;
- end
- else
- while any(Disp./SumR<=1)|x1(i)+R1(i)>Lxmax|x1(i)-R1<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
- R1(i)=Factor*R1(i);
- x1(i)=Lxmin+rand*(Lxmax-Lxmin);
- y1(i)=Lymin+rand*(Lymax-Lymin);
- Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
- SumR=R1(i)+R1(1:i-1);
- end
- if R1(i)>Rmin
- rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- else
- count=count+1;
- R1(i)=0;
- end
- end
- else
- while x1(i)+R1(i)>Lxmax|x1(i)-R1<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
- R1(i)=Factor*R1(i);
- end
- Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
- SumR=R1(i)+R1(1:i-1);
- if all(Disp./SumR>1)
- if R1(i)>Rmin
- rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- else
- count=count+1;
- R1(i)=0;
- end
- else
- while any(Disp./SumR<=1)|x1+R1>Lxmax|x1-R1<Lxmin|y1+R1>Lymax|y1-R1<Lymin
- R1(i)=Factor*R1(i);
- x1(i)=Lxmin+rand*(Lxmax-Lxmin);
- y1(i)=Lymin+rand*(Lymax-Lymin);
- Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
- SumR=R1(i)+R1(1:i-1);
- end
- if R1(i)>Rmin
- rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- else
- count=count+1;
- R1(i)=0;
- end
- end
- end
- end
- % axis([Lxmin,Lxmax,Lymin,Lymax])
- x1(R1==0)=[];
- y1(R1==0)=[];
- R1(R1==0)=[];
- R1,x1,y1
- RT=R1;
- count
- if count>0
- while length(RT)~=n
- R2=Rmin+rand*(Rmax-Rmin);
- x2=Lxmin+rand*(Lxmax-Lxmin);
- y2=Lymin+rand*(Lymax-Lymin);
- Disp=sqrt([x2-x1].^2+[y2-y1].^2);
- SumR=R2+R1;
- if all(Disp./SumR>1)
- RT=[RT,R2];
- rectangle('position',[x2-R2,y2-R2,2*R2,2*R2],'curvature',[1,1],'facecolor','w')
- axis equal
- hold on
- end
- end
- end
- R1
- set(gca,'color','k','fontsize',20,'fontweight','bold')
- title('随机画圆程序','fontsize',20,'fontweight','bold','fontname','隶书')
- Lxmin=Lxmin-Rmax;
- Lxmax=Lxmax+Rmax;
- Lymin=Lymin-Rmax;
- Lymax=Lymax+Rmax;
- axis([Lxmin,Lxmax,Lymin,Lymax])
复制代码 |
|