⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 squares.asv

📁 包含了多个实现Sierpinski分形(三角形、正方形、六边形)的Matlab程序和C程序。
💻 ASV
字号:
function squares(n);
% 谢尔宾斯基“地毯”;
% n 为递归次数,亦即分形的层数;

clc;close all;clear;
if nargin==0;       % 设定递归次数n
    n=3;
end
rand('state',3);    % 将当前状态重设到状态2,
                    % 使每次程序运行时生成的各个分形正方形的颜色不变
C=rand(n+5,3);      % 生成一个(n+4)*3的随机矩阵C,对各个分形填色
figure;
axis square equal;  % 保持纵、横坐标的刻度单位一致
axis([-1 9.5 -1.2 1.2]); % 设定标度范围
grid;hold on;
a=-pi/4;            % 设定正方形的偏转角度。a=-pi/4时,正方形有一条边平行于x轴
p=-2;                % 设定正方形中心位置。p=j时,中心位置为(j,0)
r=sqrtm(2);                % 设定正方形的半径,即中心到顶角的距离
[p,r,n,a]=squsqu(p,r,n,a,C);

function [p,r,n,a]=squsqu(p,r,n,a,C);
% 绘制正方形,该函数通过递归实现对正方形的分形;
% p 是正方形的中心位置;
% r 是正方形的半径;
% n 是递归次数;
% a 是正方形的偏转角度;
% C 是颜色矩阵;

s=2.5;              % 设定正方形的中心偏移量,从而可得到分形的生成过程
z=p+r*exp(i*([0:4]*pi*1/2+a))+s;        % z 是主正方形的中心位置
z1=p+r*exp(i*([0:4]*pi*1/2))/2+s;     % zr 是主正方形内各个分形的中心位置
z2=p+sqrtm(2)*r*exp(i*([0:4]*pi*1/2+a))/2+s;
pf=fill(real(z),imag(z),C(n+2,:));      % 生成一个已填色的正方形
set(pf,'EdgeColor',C(n+2,:));           % 设定正方形边缘的颜色
if n>0;
%   [p,r,n,a]=squsqu(p,r/2,n-1,a+pi/3,C);       % 绘制主正方形中心的分形,     
%   n=n+1;r=r*2;a=a-pi/3;
%   正方形中这一部分是挖空的,故这两行程序可省去
    [z1(1),r,n,a]=squsqu(z1(1),1.05*r/3,n-1,a,C);    % 绘制主正方形右下角的分形
    n=n+1;r=r*3/1.05;
    [z1(2),r,n,a]=squsqu(z1(2),1.05*r/3,n-1,a,C);    % 绘制主正方形上部的分形
    n=n+1;r=r*3/1.05;
    [z1(3),r,n,a]=squsqu(z1(3),1.05*r/3,n-1,a,C);    % 绘制主正方形左下角的分形
    n=n+1;r=r*3/1.05;
    [z1(4),r,n,a]=squsqu(z1(4),1.05*r/3,n-1,a,C);    % 绘制主正方形左下角的分形
    n=n+1;r=r*3/1.05;
    [z2(1),r,n,a]=squsqu(z2(1),1.05*r/3,n-1,a,C);    % 绘制主正方形右下角的分形
    n=n+1;r=r*3/1.05;
    [z2(2),r,n,a]=squsqu(z2(2),r/3,n-1,a,C);    % 绘制主正方形上部的分形
    n=n+1;r=r*3/1.05;
    [z2(3),r,n,a]=squsqu(z2(3),1.05*r/3,n-1,a,C);    % 绘制主正方形左下角的分形
    n=n+1;r=r*3/1.05;
    [z2(4),r,n,a]=squsqu(z2(4),1.05*r/3,n-1,a,C);    % 绘制主正方形左下角的分形
    n=n+1;r=r*3/1.05;
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -