1 May 2013

matlab制作分形图

收藏到CSDN网摘



分形是一个很常见的数学问题,一般方法是递归,但是matlab的递归速度比较低下.8层的分形图制作递归的话,大概需要1.9s左右.
下面的代码是迭代方法.
tic;
% 原始三角形顶点,保存在一个n*3*2的数组,第三维共2层,第一层是x,第二层是y
pts(:,:,1) = [0,1,0.5];
pts(:,:,2) = [0,0,0.8];
% 层数
layer = 8;
% 当前层的三角形顶点
cur_pts = pts;
while layer>0
    next_pts = []; % 利用当前层顶点计算出来下一层的三角形顶点
    for num=1:size(cur_pts,1)
        % 利用三顶点计算分形三角形顶点坐标
        a = cur_pts(num,1,:);
        b = cur_pts(num,2,:);
        c = cur_pts(num,3,:);
        next_pts(end+1:end+3,:,:) = [a,(a+c)/2,(a+b)/2;
            (a+b)/2,b,(b+c)/2;
            (a+c)/2,(b+c)/2,c];
    end
    % 迭代当前层顶点
    cur_pts = next_pts;
    % 将顶点加入结果数组
    pts(end+1:end+size(cur_pts,1),:,:) = cur_pts;
    % 层数递减
    layer = layer-1;
end
% 作图
patch(pts(:,:,1)',pts(:,:,2)','w');
toc;

No comments :

Post a Comment