clf reset
set(gcf,'color','white','menubar','none', ...
'numbertitle','off','name','Fractal Fern')
x = [.5; .5];
h = animatedline('Marker', '.', 'LineStyle', 'none', 'Color', [0 2/3 0]);
axis([-3 3 0 10])
axis off %不显示坐标轴,只显示叶子本身
stop = uicontrol('style','toggle','string','stop', ...
'background','white');
drawnow %绘制
p = [ .85 .92 .99 1.00];
A1 = [ .85 .04; -.04 .85]; b1 = [0; 1.6];
A2 = [ .20 -.26; .23 .22]; b2 = [0; 1.6];
A3 = [-.15 .28; .26 .24]; b3 = [0; .44];
A4 = [ 0 0 ; 0 .16];
cnt = 1; %将计数器的初始值设置为1
while ~get(stop,'value')
r = rand;
if r < p(1)
x = A1*x + b1;
elseif r < p(2)
x = A2*x + b2;
elseif r < p(3)
x = A3*x + b3;
x = A4*x;
addpoints(h, x(1), x(2));
drawnow %重新绘制图形
cnt = cnt + 1; %生成新的点后计数器的数值自增1
t = toc; %读取秒表数据
s = sprintf('%8.0f points in %6.3f seconds',cnt,t);
text(-1.5,-0.5,s,'fontweight','bold');
set(stop,'style','pushbutton','string','close','callback','close(gcf)')
EraseMode
EraseMode 属性不再受支持,而且在以后的版本中会出错。
初始语句:
h = plot(x(1),x(2),'.');
darkgreen = [0 2/3 0];
set(h,'markersize',1,'color',darkgreen,'erasemode','none');
h = animatedline('Marker', '.', 'LineStyle', 'none', 'Color', [0 2/3 0]);
1 设置颜色
在MATLAB中,颜色可以使用多种方式来表示,其中一种常用的方式是使用
RGB
(Red-Green-Blue)表示法。在RGB表示法中,每个颜色的红、绿、蓝三个分量的取值范围为0到1,表示颜色的深浅程度。
function fern_a
clf reset
set(gcf,'color','black','menubar','none', ...
'numbertitle','off','name','Fractal Fern')
x = [.5; .5];
h = animatedline('Marker', '.', 'LineStyle', 'none', 'Color', [1 0.75 0.8]);
axis([-3 3 0 10])
axis off
stop = uicontrol('style','toggle','string','stop', ...
'background','black','ForegroundColor','white');
drawnow
p = [ .85 .92 .99 1.00];
A1 = [ .85 .04; -.04 .85]; b1 = [0; 1.6];
A2 = [ .20 -.26; .23 .22]; b2 = [0; 1.6];
A3 = [-.15 .28; .26 .24]; b3 = [0; .44];
A4 = [ 0 0 ; 0 .16];
cnt = 1;
while ~get(stop,'value')
r = rand;
if r < p(1)
x = A1*x + b1;
elseif r < p(2)
x = A2*x + b2;
elseif r < p(3)
x = A3*x + b3;
x = A4*x;
addpoints(h, x(1), x(2));
drawnow
cnt = cnt + 1;
t = toc;
s = sprintf('%8.0f points in %6.3f seconds',cnt,t);
text(-1.5,-0.5,s,'fontweight','bold','Color','red');
set(stop,'style','pushbutton','string','close','callback','close(gcf)')
2 旋转蕨型叶图
%修改坐标
addpoints(h, x(2), x(1));
%修改标注位置
s = sprintf('%8.0f points in %6.3f seconds',cnt,t);
text(2.5,-2.9,s,'fontweight','bold','Color','red');
A4 = [0, 0; 0, 0.16];
A4 = [0, 0; 0, 0.08];
%这将使得蕨型叶的枝干更加瘦长
蕨型叶的起始点均为(0,0)。
4 塞平斯基三角形
function sierpinski_triangle_a
clf reset
set(gcf, 'color', 'white', 'menubar', 'none', ...
'numbertitle', 'off', 'name', 'Fractal Sierpinski Triangle')
x = [.5; sqrt(3)/6];
h = animatedline('Marker', '.', 'LineStyle', 'none', 'Color', [0 2/3 0]);
axis([0 1 0 sqrt(3)/2])
axis off
stop = uicontrol('style', 'toggle', 'string', 'stop', ...
'background', 'white');
hold on
plot([0, 1, 0.5, 0], [0, 0, sqrt(3)/2, 0], 'k-*'); % 绘制三角形的顶点
drawnow
A1 = [0.5, 0; 0, 0.5]; b1 = [0; 0];
A2 = [0.5, 0; 0, 0.5]; b2 = [0.5; 0];
A3 = [0.5, 0; 0, 0.5]; b3 = [0.25; sqrt(3)/4];
cnt = 1;
while ~get(stop, 'value')
r = rand;
if r <= 1/3
x = A1 * x + b1;
elseif r <= 2/3 & r>1/3
x = A2 * x + b2;
x = A3 * x + b3;
addpoints(h, x(1), x(2));
drawnow
cnt = cnt + 1;
t = toc;
s = sprintf('%8.0f points in %6.3f seconds', cnt, t);
text(0.25, -0.05, s, 'fontweight', 'bold');
set(stop, 'style', 'pushbutton', 'string', 'close', 'callback', 'close(gcf)')
蕨型叶是通过一个点的反复变换产生的,假设x是一个含有两个分量的向量,可以用来表示平面内的一个点,则可以用Ax+b的形式对其进行变换。语句darkgreen=[0 2/3 0]设置深绿色的颜色变量,在matlab中用红绿蓝分量来表示颜色,这里将绿色分量设置为2/3,其余为0。在RGB表示法中,每个颜色的红、绿、蓝三个分量的取值范围为0到1,表示颜色的深浅程度。在MATLAB中,颜色可以使用多种方式来表示,其中一种常用的方式是使用。来绘制蕨型叶,h为蕨型叶图形的句柄。蕨型叶的起始点均为(0,0)。
%两个组件
h1=uicontrol('style','togglebutton','string','Stop');
h2=axes('XLim',[-3 3],'YLim',[0,10],'Position',[0.15,0.15,0.75,0.75]);
%画蕨形叶图
x=[0.5;0.5];
plot(h2,x(1),x(2),'.','color',[0 2/3 0],'markersize',1);
axis([-3 3 0 10]);
hold.
h=animatedline(x(1),x(2));
darkgreen = [0 2/3 0];
set(h, ‘linestyle’,‘none’,‘markersize’, 1, ‘color’, darkgreen,‘marker’,‘.’);
在循环末尾修改语句为
addpoints(h,x(1),x(2));
cnt = cnt+1;
drawnow