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

[原创]一朵玫瑰花的程序

[复制链接]
发表于 2010-6-2 20:26:34 | 显示全部楼层 |阅读模式 来自 北京
本帖最后由 qibbxxt 于 2010-6-2 20:33 编辑

之前看过在一本书上看见有人用C语言画玫瑰花,于是我把它变成Matlab,把代码发在校内上,但是很少有人看,今天发在这里,程序不是很通用,因为当时急于看到花的样子

  1. function plot_rose
  2. draw_main(450,90);
  3. function draw_main(x,y)
  4. %粉红色玫瑰
  5. arcdata{1}=[65 -60 150 350 8
  6.     66 -54 300 470 8
  7.     65 -56 30 230 10
  8.     64 -57 300 490 17];
  9. ellipsedata{1}=[73 -30 250 450 27 40
  10.     59 -30 100 290 27 40
  11.     65  -40 140 270 20 30];
  12. arcdata{2}=[0 0 150 350 12
  13.     1 8 280 470 12
  14.     0 2 30 230 16
  15.     0 3 80 240 28
  16.     2 8 180 330 22
  17.     -2 2 310 460 25];
  18. ellipsedata{2}=[-12 30 120 300 30 40
  19.     10 28 250 423 30 42
  20.     -4  10 290 393 30 40];
  21. ellipsedata{3}=[120 5 0 360 15 25];
  22. ellipsedata{4}=[-70 10 0 360 14 20];
  23. rose_e{2}=[x+16 y+32 235 355 26 35
  24.     x-15 y+32 190 310 30 35
  25.     x+0 y+35 190 350 43 50];
  26. rose_e{1}=[x+80 y-48 220 350 22 50
  27.     x+50 y-48 190 320 22 50
  28.     x+65 y-28 180 360 36 50];
  29. rose_e{3}=[x+120 y-6 200 340 17 25
  30.     x+120 y+7 160 380 17 27];
  31. rose_e{4}=[x-70 y+15 140 390 17 20
  32.     x-75 y-10 205 340 10 30
  33.     x-60 y-10 195 340 5 30];
  34. arcdata{3}=[0 82 190 350 6];
  35. ss={'m','r','b','y'};
  36. s0={'k','k','g'};
  37. figure('menubar','none','numbertitle','off','name','rose');
  38. % figure('numbertitle','off','name','rose');
  39. hold on
  40. for j=1:length(ellipsedata)
  41.     for i=1:size(ellipsedata{j},1)
  42.         rectangle('Position',[x+ellipsedata{j}(i,1)-ellipsedata{j}(i,5),y+ellipsedata{j}(i,2)-ellipsedata{j}(i,6),2*ellipsedata{j}(i,5),2*ellipsedata{j}(i,6)],'Curvature',[1,1],...
  43.             'FaceColor',ss{j})
  44.     end
  45.     if j<4
  46.         for i=1:size(arcdata{j},1)
  47.             draw_arc(x+arcdata{j}(i,1),y+arcdata{j}(i,2),arcdata{j}(i,3),arcdata{j}(i,4),arcdata{j}(i,5),s0{j});
  48.         end
  49.     end
  50.     for i=1:size(rose_e{j},1)
  51.         plot_rose_e(rose_e{j},j);
  52.     end
  53. end
  54. for j=1:3
  55.     zhuzhi=[x-98,y+100+j,255,371,100,80
  56.         x-20,y+30+j,260,358,140,140
  57.         x+224,y+20+j,180,218,160,140];
  58.     draw_branch(zhuzhi);
  59. end
  60. ce_branch=[x+70,y+34,180,233,140,140;
  61.   x,y+40,205,255,100,120;
  62.   x+135,y-30,209,249,72,120;
  63.   x,y+20,263,301,100,120;
  64.   x+85,y-10,278,305,100,120;
  65.   x+100,y-62,282,308,90,120;
  66.   x-50,y-10,277,314,30,120;
  67.   x+70,y+80,222,266,52,120;
  68.   x-60,y-45,229,266,52,120;
  69.   x+79,y-45,229,266,52,120;
  70.   x+84,y,224,273,52,120;
  71.   x+110,y+40,240,282,100,120];
  72. draw_branch(ce_branch);
  73. t_leaf=[x+168,y+282,10,20,-40;
  74.   x+160,y+252,8,16,260;
  75.   x+145,y+270,8,16,-15;
  76.   x+156,y+224,10,20,-45;
  77.   x+150,y+200,8,16,270;
  78.   x+135,y+220,8,16,-10;
  79.   x+146,y+144,8,16,-80;
  80.   x+130,y+130,6,12,235;
  81.   x+125,y+154,7,14,-10;
  82.   x+78,y+98,6,12,-90;
  83.   x+60,y+90,5,10,180;
  84.   x+70,y+109,5,10,-45;
  85.   x-125,y+270,12,24,60;
  86.   x-95,y+270,10,20,10;
  87.   x-110,y+245,10,20,90;
  88.   x-105,y+220,10,20,45;
  89.   x-100,y+190,8,16,135;
  90.   x-75,y+210,8,16,-45;
  91.   x+65,y+190,10,20,-45;
  92.   x+40,y+185,8,16,0;
  93.   x+55,y+165,8,16,90];
  94. for j=1:size(t_leaf,1)
  95.     draw_elli(t_leaf(j,1),t_leaf(j,2),t_leaf(j,3),t_leaf(j,4),t_leaf(j,5));
  96. end
  97. axis ij
  98. axis off
  99. set(gcf,'color','k');
  100. daspect([1,1,1])

  101. % 画旋转椭圆
  102. function draw_elli(x0,y0,a,b,theta)
  103. theta=-theta;
  104. t = 0:0.01:2*pi;
  105. x =  a*cos(t);
  106. y =  b*sin(t);
  107. xy = zeros(2,length(t));
  108. for i = 1:length(t)
  109.     xy(:,i) = expm([0,-pi/180*theta;pi/180*theta,0])*[x(i);y(i)];
  110. end
  111. plot(x0 +xy(1,:),480-y0 + xy(2,:),'g');
  112. % 画弧线
  113. function draw_arc(x0,y0,st_a,en_a,r,c_c)
  114. t = (pi/180*st_a:0.01:pi/180*en_a)-pi;
  115. x = x0 + r*cos(t);
  116. y = y0 + r*sin(t);
  117. plot(x,y,c_c);
  118. % 花萼
  119. function plot_rose_e(matr,ch)
  120. x=[];y=[];n=size(matr,1);
  121. for i=1:size(matr,1)
  122.     t=(matr(i,3):matr(i,4))*pi/180-pi;
  123.     x1=matr(i,1)+matr(i,5)*cos(t);
  124.     y1=matr(i,2)+matr(i,6)*sin(t);
  125.     if i<3
  126.         x1=2*matr(i,1)-x1;
  127.     end
  128.     x1=fliplr(x1);
  129.     y1=fliplr(y1);
  130.     if n<3 && i<2
  131.         x1=fliplr(x1);
  132.         y1=fliplr(y1);
  133.     end
  134.     if ch==4 && i==2
  135.         x1=fliplr(x1);
  136.         y1=fliplr(y1);
  137.     end
  138.    
  139.     x=[x,x1];
  140.     y=[y,y1];
  141. end
  142. fill(x,y,'g');
  143. % 画树枝
  144. function draw_branch(zhuzhi)
  145. for k=1:size(zhuzhi,1)
  146.     t=(zhuzhi(k,3):zhuzhi(k,4))*pi/180-pi;
  147.     x1=zhuzhi(k,1)+zhuzhi(k,5)*cos(t);
  148.     y1=zhuzhi(k,2)+zhuzhi(k,6)*sin(t);
  149.     x1=2*zhuzhi(k,1)-x1;
  150.     plot(x1,y1,'g','linewidth',2);
  151. end
复制代码

本帖子中包含更多资源

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

×

评分

1

查看全部评分

发表于 2010-6-12 00:15:55 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
挺好看,不错!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-6-12 00:37:56 | 显示全部楼层 来自 新疆乌鲁木齐
这样画画可太累了,在表达了qibbxxt老弟的MATLAB水准、持之以恒的耐心之外,也表明MATLAB实在不是画画最合适的软件。
回复 不支持

使用道具 举报

发表于 2010-6-24 16:44:40 | 显示全部楼层 来自 山西太原
不错,顶一个!!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-7-25 19:47:57 | 显示全部楼层 来自 山西太原
呵呵,很漂亮!谢谢版主分享!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-8-24 23:18:06 | 显示全部楼层 来自 广东深圳
很漂亮的花,欣赏了。
回复 不支持

使用道具 举报

发表于 2010-8-25 14:30:24 | 显示全部楼层 来自 黑龙江哈尔滨
不错,初学者,学习一下
回复 不支持

使用道具 举报

发表于 2010-8-26 14:37:28 | 显示全部楼层 来自 湖北武汉
人才:victory:
回复 不支持

使用道具 举报

发表于 2010-8-26 19:29:41 | 显示全部楼层 来自 山西吕梁
这个程序不在说明MATLAB能画画,只是说明编程者是高手。
回复 不支持

使用道具 举报

发表于 2010-12-10 11:17:08 | 显示全部楼层 来自 四川成都
太厉害了啊!:)
回复 不支持

使用道具 举报

发表于 2010-12-10 12:53:28 | 显示全部楼层 来自 辽宁沈阳
相当强大,很漂亮 多谢分享
回复 不支持

使用道具 举报

发表于 2010-12-28 18:16:54 | 显示全部楼层 来自 重庆沙坪坝区
我复制了你的代码,怎么画不出来呢?
回复 不支持

使用道具 举报

发表于 2010-12-28 21:16:26 | 显示全部楼层 来自 天津
我试了,可以的!楼主很强大!
回复 不支持

使用道具 举报

发表于 2010-12-30 11:08:36 | 显示全部楼层 来自 黑龙江哈尔滨
我靠,太牛逼了,回去画给我女盆友看,嘿嘿,学习一下
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 06:14 , Processed in 0.068492 second(s), 20 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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