1701006450
【分析】
1701006451
1701006452
计算机提供给我们创新与创意的技术平台,为此也使得我们自身变得更加强大。采用计算机模拟分形学,有很多不同的图案,具体的分形图如分形树和科赫曲线等。
1701006453
1701006455
5.1.1 分形树
1701006456
1701006457
分形树类似于无限繁殖,从一个节点出来,开始一分为二,然后重复此操作,一颗类似大树模样的图形就展现在我们面前。
1701006458
1701006459
采用计算机进行分形树模拟,MATLAB程序如下:
1701006460
1701006461
clc,clear,close all %清屏和清除变量 warning off %消除警告 h=10;d=0.6;th=pi/4;n=9; %参数初始化 A=zeros(2,2^(n+1)-2);A(
:,2)=[0;h]; C=[cos(th) -sin(th);sin(th) cos(th)];D=inv(C); for i=2
:n B(
:,2^(i-1)-1
:2^i-2)=A(
:,2^(i-1)-1
:2^i-2); %矩阵运算,每一个点分出两个枝 A(
:,2^i-1
:2^i+2^(i-1)-2)=d*C*B(
:,2^(i-1)-1
:2^i-2)+[0;h]*ones(1, 2^i-2^(i-1)); A(
:,2^i+2^(i-1)-1
:2^(i+1)-2)=d*D*B(
:,2^(i-1)-1
:2^i-2)+[0;h]* ones(1,2^i-2^(i-1)); end for i=1
:2^n-1 L=line(A(1,[2*i-1 2*i]),A(2,[2*i-1 2*i]));set(L,‘LineWidth’, 2); %绘制树干图 end
1701006462
1701006463
运行程序输出图形如图5-2所示。
1701006464
1701006465
1701006466
1701006467
1701006468
图5-2 分形树
1701006469
1701006470
从整体上看,分形物体是处处不规则的。如海岸线和山川,从远距离观察,其形状是极不规则的。然而在不同尺度上,规则性又是相同的。因为从近距离观察海岸线和山川形状,其局部形状又与整体形态相似,它们从整体到局部都是自相似的。
1701006471
1701006473
5.1.2 素描树
1701006474
1701006475
为了较好模拟自然界的树模型,MATLAB软件提供了强大的绘图功能,用户只需要合理地掌握和运行绘图功能,即能运行输出用户想要的图像。编写程序输出素材大树的图像如下:
1701006476
1701006477
clc,clear,close all %清屏和清除变量 warning off %消除警告 M=[-0.64,0,0,0.5,0.86,0.25;… -0.04,-0.47,0.07,-0.02,0.49,0.51;… 0.2,0.33,-0.49,0.43,0.44,0.25;… 0.46,-0.25,0.41,0.36,0.25,0.57;… -0.06,0.45,-0.07,-0.11,0.59,0.1]; %生成系数矩阵M p=[0.06,0.22,0.23,0.24,0.25]; %生成几率向量 IFS_draw(M,p); %调用函数绘图 axis image; %设置坐标轴属性 set(gcf,‘Color’,‘w’); %设置背景色为白色
1701006478
1701006479
相应的素描绘图程序如下:
1701006480
1701006481
function IFS_draw(M,p) %迭代函数法生成分形图形的通用函数 %M是矩阵系数 %p是对应的几率 %比如M的取值是
: %I a(i) b(i) c(i) d(i) e(i) f(i) %1 0.3330 0 0 0.3330 0 0 %2 0.1670 -0.2890 0.2890 0.1670 0.3330 0 %3 0.1670 0.2890 -0.2890 0.1670 0.5000 0.2890 %4 0.3330 0 0 0.3330 0.6670 0 %p的取值是: % 0.2500 0.2500 0.2500 0.2500 N=30000; %迭代次数 for k=1
:length(p); %生成映射矩阵a1,a2,… eval([‘a’,num2str(k),’=reshape(M(‘,num2str(k),’,
:),2,3);’]); end xy=zeros(2,N); %设置迭代矩阵初值 pp=meshgrid(p); %生成网格矩阵 pp=tril(pp); %取上三角矩阵 pp=sum(pp,2); %对行向量求和,从而得到几率的累加结果 for k=1
:N-1; a=rand-pp; %计算随机数和几率向量的差值 d=find(a<=0); %找出满足几率条件的位置 xy(
:,k+1)=eval([‘a’,num2str(d(1)),’(
:,1:2)’])*xy(
:,k)+… eval([‘a’,num2str(d(1)),’(
:,3)’]);%计算迭代点和映射矩阵的乘积 end P=complex(xy(1,
:),xy(2,:)); %生成复数点 plot(P,‘k.’,‘markersize’,2); %画图 axis equal; %设置坐标轴属性
1701006482
1701006483
运行程序输出图形如图5-3所示。
1701006484
1701006485
1701006486
1701006487
1701006488
图5-3 素描树模拟
1701006489
1701006490
同样修改参数即可得到不同风格的素描树,程序如下:
1701006491
1701006492
clc,clear,close all %清屏和清除变量 warning off %消除警告 M=[0.06,0,0,0.6,0,0;… 0.04,0,0,-0.5,0,1;… 0.46,-0.34,0.32,0.38,0,0.6;… 0.48,0.17,-0.15,0.42,0,1;… 0.43,-0.26,0.27,0.48,0,1;… 0.42,0.35,-0.36,0.31,0,0.8]; %生成系数矩阵M p=[0.1,0.1,0.1,0.23,0.23,0.24]; %生成几率向量 IFS_draw(M,p); %调用函数绘图 axis image; %设置坐标轴属性 set(gcf,‘Color’,‘w’); %设置背景色为白色
1701006493
1701006494
运行程序输出图形如图5-4所示。
1701006495
1701006496
1701006497
1701006498
1701006499
图5-4 素描大树
[
上一页 ]
[ :1.70100645e+09 ]
[
下一页 ]