MATLAB繪制玫瑰花的程序


 

之前看過在一本書上看見有人用C語言畫玫瑰花,於是我把它變成Matlab,把代碼發在校內上,但是很少有人看,今天發在這里,程序不是很通用,因為當時急於看到花的樣子!

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
function plot_rose
draw_main(450,90);
function draw_main(x,y)
%粉紅色玫瑰
arcdata{1}=[65 -60 150 350 8
    66 -54 300 470 8
    65 -56 30 230 10
    64 -57 300 490 17];
ellipsedata{1}=[73 -30 250 450 27 40
    59 -30 100 290 27 40
    65  -40 140 270 20 30];
arcdata{2}=[0 0 150 350 12
    1 8 280 470 12
    0 2 30 230 16
    0 3 80 240 28
    2 8 180 330 22
    -2 2 310 460 25];
ellipsedata{2}=[-12 30 120 300 30 40
    10 28 250 423 30 42
    -4  10 290 393 30 40];
ellipsedata{3}=[120 5 0 360 15 25];
ellipsedata{4}=[-70 10 0 360 14 20];
rose_e{2}=[x+16 y+32 235 355 26 35
    x-15 y+32 190 310 30 35
    x+0 y+35 190 350 43 50];
rose_e{1}=[x+80 y-48 220 350 22 50
    x+50 y-48 190 320 22 50
    x+65 y-28 180 360 36 50];
rose_e{3}=[x+120 y-6 200 340 17 25
    x+120 y+7 160 380 17 27];
rose_e{4}=[x-70 y+15 140 390 17 20
    x-75 y-10 205 340 10 30
    x-60 y-10 195 340 5 30];
arcdata{3}=[0 82 190 350 6];
ss={'m','r','b','y'};
s0={'k','k','g'};
figure('menubar','none','numbertitle','off','name','rose');
% figure('numbertitle','off','name','rose');
hold on
for j=1:length(ellipsedata)
    for i=1:size(ellipsedata{j},1)
        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],...
            'FaceColor',ss{j})
    end
    if j<4
        for i=1:size(arcdata{j},1)
            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});
        end
    end
    for i=1:size(rose_e{j},1)
        plot_rose_e(rose_e{j},j);
    end
end
for j=1:3
    zhuzhi=[x-98,y+100+j,255,371,100,80
        x-20,y+30+j,260,358,140,140
        x+224,y+20+j,180,218,160,140];
    draw_branch(zhuzhi);
end
ce_branch=[x+70,y+34,180,233,140,140;
    x,y+40,205,255,100,120;
    x+135,y-30,209,249,72,120;
    x,y+20,263,301,100,120;
    x+85,y-10,278,305,100,120;
    x+100,y-62,282,308,90,120;
    x-50,y-10,277,314,30,120;
    x+70,y+80,222,266,52,120;
    x-60,y-45,229,266,52,120;
    x+79,y-45,229,266,52,120;
    x+84,y,224,273,52,120;
    x+110,y+40,240,282,100,120];
draw_branch(ce_branch);
t_leaf=[x+168,y+282,10,20,-40;
    x+160,y+252,8,16,260;
    x+145,y+270,8,16,-15;
    x+156,y+224,10,20,-45;
    x+150,y+200,8,16,270;
    x+135,y+220,8,16,-10;
    x+146,y+144,8,16,-80;
    x+130,y+130,6,12,235;
    x+125,y+154,7,14,-10;
    x+78,y+98,6,12,-90;
    x+60,y+90,5,10,180;
    x+70,y+109,5,10,-45;
    x-125,y+270,12,24,60;
    x-95,y+270,10,20,10;
    x-110,y+245,10,20,90;
    x-105,y+220,10,20,45;
    x-100,y+190,8,16,135;
    x-75,y+210,8,16,-45;
    x+65,y+190,10,20,-45;
    x+40,y+185,8,16,0;
    x+55,y+165,8,16,90];
for j=1:size(t_leaf,1)
    draw_elli(t_leaf(j,1),t_leaf(j,2),t_leaf(j,3),t_leaf(j,4),t_leaf(j,5));
end
axis ij
axis off
set(gcf,'color','k');
daspect([1,1,1])</p><p>% 畫旋轉橢圓
function draw_elli(x0,y0,a,b,theta)
theta=-theta;
t = 0:0.01:2*pi;
x =  a*cos(t);
y =  b*sin(t);
xy = zeros(2,length(t));
for i = 1:length(t)
    xy(:,i) = expm([0,-pi/180*theta;pi/180*theta,0])*[x(i);y(i)];
end
plot(x0 +xy(1,:),480-y0 + xy(2,:),'g');</p><p>% 畫弧線
function draw_arc(x0,y0,st_a,en_a,r,c_c)
t = (pi/180*st_a:0.01:pi/180*en_a)-pi;
x = x0 + r*cos(t);
y = y0 + r*sin(t);
plot(x,y,c_c);</p><p>% 花萼
function plot_rose_e(matr,ch)
x=[];y=[];n=size(matr,1);
for i=1:size(matr,1)
    t=(matr(i,3):matr(i,4))*pi/180-pi;
    x1=matr(i,1)+matr(i,5)*cos(t);
    y1=matr(i,2)+matr(i,6)*sin(t);
    if i<3
        x1=2*matr(i,1)-x1;
    end
    x1=fliplr(x1);
    y1=fliplr(y1);
    if n<3 && i<2
        x1=fliplr(x1);
        y1=fliplr(y1);
    end
    if ch==4 && i==2
        x1=fliplr(x1);
        y1=fliplr(y1);
    end

    x=[x,x1];
    y=[y,y1];
end
fill(x,y,'g');</p><p>% 畫樹枝
function draw_branch(zhuzhi)
for k=1:size(zhuzhi,1)
    t=(zhuzhi(k,3):zhuzhi(k,4))*pi/180-pi;
    x1=zhuzhi(k,1)+zhuzhi(k,5)*cos(t);
    y1=zhuzhi(k,2)+zhuzhi(k,6)*sin(t);
    x1=2*zhuzhi(k,1)-x1;
    plot(x1,y1,'g','linewidth',2);
end

 

 

 

http://www.ylsnuha.com/matlab-drawing-of-roses/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM