找回密码
 注册
Simdroid-非首页
查看: 467|回复: 3

matlab画圆

[复制链接]
Gavin2004 该用户已被删除
发表于 2006-3-22 12:46:55 | 显示全部楼层 |阅读模式 来自 湖北武汉
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2006-3-22 20:32:19 | 显示全部楼层 来自 新疆乌鲁木齐

Re:matlab画圆

Simdroid开发平台
okok上贴了,但simwe的高手比较扎堆儿,所以再贴在这里,请高手指正,因为肯定不只一个思路。
  1. function RandomPlotCircle(Lxmin,Lxmax,Lymin,Lymax,Rmin,Rmax,n,Factor)
  2. & This Programm made by Bainhome
  3. & Date:Mar.22th 2006
  4. & First Edited in Mar.23th 2006
  5. % **********************************  输  *  入  *  变  *  量  *  介  *  绍  **********************************
  6. % Lmin,Lmax——The Bound of Circle Plot  Area  (Both X dir & Y dir)
  7. % Rmin,Rmax——The Limitation of Radius
  8. % Example:RandomPlotCircle(1,10,1,10,.1,2,10)
  9. % *****************************************  完  *  毕  ***************************************************
  10. close all
  11. clc
  12. count=0;
  13. Lxmin=Lxmin+Rmax;
  14. Lxmax=Lxmax-Rmax;
  15. Lymin=Lymin+Rmax;
  16. Lymax=Lymax-Rmax;
  17. R1(1)=Rmin+rand*(Rmax-Rmin);
  18. RT(1)=R1(1);
  19. x1(1)=Lxmin+rand*(Lxmax-Lxmin);
  20. y1(1)=Lymin+rand*(Lymax-Lymin);
  21. for i=1:1
  22.     if x1(i)+R1(i)<=Lxmax&x1(i)-R1(i)>=Lxmin&y1(i)+R1(i)<=Lymax&y1(i)-R1(i)>=Lymin
  23.     else
  24.         R1(i)=Factor*R1(i);
  25.         while x1(i)+R1(i)>Lxmax|x1(i)-R1(i)<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
  26.             R1(i)=Factor*R1(i);
  27.         end
  28.     end
  29.     if R1(i)>Rmin
  30.         rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
  31.         axis equal
  32.         hold on
  33.     else
  34.         count=count+1;
  35.         R1(i)=0;
  36.     end
  37. end
  38. for i=2:n
  39.     R1(i)=Rmin+rand*(Rmax-Rmin);
  40.     RT(i)=R1(i);
  41.     x1(i)=Lxmin+rand*(Lxmax-Lxmin);
  42.     y1(i)=Lymin+rand*(Lymax-Lymin);
  43.     if x1(i)+R1(i)<=Lxmax&x1(i)-R1(i)>=Lxmin&y1(i)+R1(i)<=Lymax&y1(i)-R1(i)>=Lymin
  44.         Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
  45.         SumR=R1(i)+R1(1:i-1);
  46.         if all(Disp./SumR>1)
  47.             if R1(i)>Rmin
  48.                 rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
  49.                 axis equal
  50.                 hold on
  51.             else
  52.                 count=count+1;
  53.                 R1(i)=0;
  54.             end
  55.         else
  56.             while any(Disp./SumR<=1)|x1(i)+R1(i)>Lxmax|x1(i)-R1<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
  57.                 R1(i)=Factor*R1(i);
  58.                 x1(i)=Lxmin+rand*(Lxmax-Lxmin);
  59.                 y1(i)=Lymin+rand*(Lymax-Lymin);
  60.                 Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
  61.                 SumR=R1(i)+R1(1:i-1);
  62.             end
  63.             if R1(i)>Rmin
  64.                 rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
  65.                 axis equal
  66.                 hold on
  67.             else
  68.                 count=count+1;
  69.                 R1(i)=0;
  70.             end
  71.         end
  72.     else
  73.         while x1(i)+R1(i)>Lxmax|x1(i)-R1<Lxmin|y1(i)+R1(i)>Lymax|y1(i)-R1(i)<Lymin
  74.             R1(i)=Factor*R1(i);
  75.         end
  76.         Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
  77.         SumR=R1(i)+R1(1:i-1);
  78.         if all(Disp./SumR>1)
  79.             if R1(i)>Rmin
  80.                 rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
  81.                 axis equal
  82.                 hold on
  83.             else
  84.                 count=count+1;
  85.                 R1(i)=0;
  86.             end
  87.         else
  88.             while any(Disp./SumR<=1)|x1+R1>Lxmax|x1-R1<Lxmin|y1+R1>Lymax|y1-R1<Lymin
  89.                 R1(i)=Factor*R1(i);
  90.                 x1(i)=Lxmin+rand*(Lxmax-Lxmin);
  91.                 y1(i)=Lymin+rand*(Lymax-Lymin);
  92.                 Disp=sqrt([x1(i)-x1(1:i-1)].^2+[y1(i)-y1(1:i-1)].^2);
  93.                 SumR=R1(i)+R1(1:i-1);
  94.             end
  95.             if R1(i)>Rmin
  96.                 rectangle('position',[x1(i)-R1(i),y1(i)-R1(i),2*R1(i),2*R1(i)],'curvature',[1,1],'facecolor','w')
  97.                 axis equal
  98.                 hold on
  99.             else
  100.                 count=count+1;
  101.                 R1(i)=0;
  102.             end
  103.         end
  104.     end
  105. end
  106. % axis([Lxmin,Lxmax,Lymin,Lymax])
  107. x1(R1==0)=[];
  108. y1(R1==0)=[];
  109. R1(R1==0)=[];
  110. R1,x1,y1
  111. RT=R1;
  112. count
  113. if count>0
  114.     while length(RT)~=n
  115.         R2=Rmin+rand*(Rmax-Rmin);
  116.         x2=Lxmin+rand*(Lxmax-Lxmin);
  117.         y2=Lymin+rand*(Lymax-Lymin);
  118.         Disp=sqrt([x2-x1].^2+[y2-y1].^2);
  119.         SumR=R2+R1;
  120.         if all(Disp./SumR>1)
  121.             RT=[RT,R2];
  122.             rectangle('position',[x2-R2,y2-R2,2*R2,2*R2],'curvature',[1,1],'facecolor','w')
  123.             axis equal
  124.             hold on
  125.         end
  126.     end
  127. end
  128. R1
  129. set(gca,'color','k','fontsize',20,'fontweight','bold')
  130. title('随机画圆程序','fontsize',20,'fontweight','bold','fontname','隶书')
  131. Lxmin=Lxmin-Rmax;
  132. Lxmax=Lxmax+Rmax;
  133. Lymin=Lymin-Rmax;
  134. Lymax=Lymax+Rmax;
  135. axis([Lxmin,Lxmax,Lymin,Lymax])
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

发表于 2013-6-2 20:32:41 | 显示全部楼层 来自 河北石家庄
请问一下,如果圆心随机分布,圆的半径在5-20之间,在圆的表面加一个0.5的薄层,该怎样编程啊
回复 不支持

使用道具 举报

发表于 2013-6-4 18:59:57 | 显示全部楼层 来自 澳大利亚
学习一下,如果规定了容积率该怎么做呢
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:39 , Processed in 0.040044 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表