之前看过在一本书上看见有人用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