📄 fractal_frog.m
字号:
matlab程序如下:
function fractal5_liu;
% 锯齿波生成元构成的分形(有点像两只青蛙)
% Example:
% figure
% fractal5_liu;
% 详细算法参见:
% http://graphics.shu.edu.cn/course/fractal/ch3-5.htm
%
a1=axes;
hold on
a2=axes('position',[0.6,0.72,0.2,0.2]);
hold on
sx=120;
sy=240; % 开始点坐标
gene=[0,120,-150,120,-150,120]/180*pi;
RADIAN=1;
b=0;
c=0;
A=0;
a=0;
for k=1:length(gene); %% 缩小率和维数的计算
A=A+gene(k);
a=a+cos(RADIAN);
c=c+sin(RADIAN);
if abs(gene(k)-pi)>1e-5;
b=b+1;
end
end
s=A;
t=atan(c/a);
a=a/cos(t); % 1/a为缩小比例
D=log10(b)/log10(a) % 分形维数
rectangle('position',[55,-5,35,25]);
z=15+sy/5+5i;
A=pi/6;
A=A-t;
for k=1:length(gene); % 发生器的描画[绘制生成元]
A=A+gene(k);
if abs(gene(k)-pi)>1e-5;
plot([z,z+40/a*exp(i*A)],'r','linewidth',2);
z=z+40/a*exp(i*A);
else
z=z+40/a*exp(i*A);
end
end
z=sx+i*sy;
A=-pi/4;
% line([50,95],[5,5])
% leng=400; % 开始点与结束点的距离
axes(a1);
hold on
[z,A]=fractal5sb(z,A,0,a,gene,t,s);
% 分形图形的描画
axis equal
axes(a2);
axis equal
axis off
function [z,A]=fractal5sb(z,A,n,a,gene,t,s);
% 分形图形描画函数
N=5; % 递归次数
leng=400/a^n;
if n>=N;
plot([170+200i-[z,z+leng*exp(i*A)]],'c');
z=z+leng*exp(i*A);
else
A=A-t;
for k=1:length(gene);
A=A+gene(k);
if abs(gene(k)-pi)>1e-5;
[z,A]=fractal5sb(z,A,n+1,a,gene,t,s);
else
z=z+leng/a*exp(i*A);
end
end
A=A-s+t;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -