蕨型叶分形

目录

要点

基本语句

EraseMode

习题

[1 设置颜色](#1 设置颜色)

[2 旋转蕨型叶图](#2 旋转蕨型叶图)

[3 枝干](#3 枝干)

[4 塞平斯基三角形](#4 塞平斯基三角形)


要点


蕨型叶是通过一个点的反复变换产生的,假设x是一个含有两个分量的向量,可以用来表示平面内的一个点,则可以用Ax+b的形式对其进行变换。


基本语句


语句darkgreen=[0 2/3 0]设置深绿色的颜色变量,在matlab中用红绿蓝分量来表示颜色,这里将绿色分量设置为2/3,其余为0。
采用animatedline来绘制蕨型叶,h为蕨型叶图形的句柄。

function fern_a


    shg
    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
    tic
    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;
        else
            x = A4*x;
        end
        addpoints(h, x(1), x(2));
        drawnow %重新绘制图形
        cnt = cnt + 1; %生成新的点后计数器的数值自增1
    end
    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)')
end

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


    shg
    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;
    tic
    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;
        else
            x = A4*x;
        end
        addpoints(h, x(1), x(2));
        drawnow
        cnt = cnt + 1;
    end
    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)')
end

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');

3 枝干

A4 = [0, 0; 0, 0.16];
%修改为
A4 = [0, 0; 0, 0.08];
%这将使得蕨型叶的枝干更加瘦长

蕨型叶的起始点均为(0,0)。


4 塞平斯基三角形

function sierpinski_triangle_a
    shg
    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;
    tic
    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;
        else
            x = A3 * x + b3;
        end
        addpoints(h, x(1), x(2));
        drawnow
        cnt = cnt + 1;
    end
    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)')
end
相关推荐
沅_Yuan11 小时前
基于GRU门控循环神经网络的多分类预测【MATLAB】
matlab·分类·gru
IT猿手1 天前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法
__lost1 天前
MATLAB直接推导函数的导函数和积分形式(具体方法和用例)
数学·算法·matlab·微积分·高等数学
IT猿手1 天前
SDMTSP:粒子群优化算法PSO求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
开发语言·人工智能·matlab·智能优化算法
我爱C编程2 天前
基于Qlearning强化学习的机器人路线规划matlab仿真
matlab·机器人·强化学习·路线规划·qlearning·机器人路线规划
Evand J2 天前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
孤亭远见2 天前
COMSOL with Matlab
matlab
图南楠2 天前
simulink离散传递函数得到差分方程并用C语言实现
matlab
信号处理学渣3 天前
matlab画图,选择性显示legend标签
开发语言·matlab
机器学习之心3 天前
Bayes-GRU-Attention的数据多特征分类预测Matlab实现
matlab·分类·gru