MATLAB分型植物的模拟_第1页
MATLAB分型植物的模拟_第2页
MATLAB分型植物的模拟_第3页
MATLAB分型植物的模拟_第4页
MATLAB分型植物的模拟_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-2"\h\z\u1引言 12迭代函数系统和L-系统 12.1迭代函数系统原理 12.2L-系统原理 13分形植物模拟 23.1在MATLAB中的模拟 23.2L系统的模拟 53.3迭代函数系统与L系统的结合 7参考文献 81引言随着计算机技术的发展,分形几何成了计算机图形学的一个分支,它以分形几何学为数学基础构造自相似的几何结构,借助于计算机图形学的支持模拟山脉、河流、地貌、云彩、植物等,产生人力所无法绘制的绚丽图形,达到对自然景物的逼真模拟。自然场景的模拟在工程设计,如道路桥梁设计、城市规划、多媒体电影以及电子游戏中越来越受到重视。植物,尤其是树木,作为自然场景中必不可少的元素,是计算机模拟的重要对象。自然界中树的种类繁多,形态各异,计算机要模拟出逼真的图像具有一定的难度,这也给计算机图像模拟带来了新的研究课题。当前典型的分形植物模拟方法有两种:L-系统和迭代函数系统,但L-系统需先确定生成规则,简洁但不够灵活,且难于编程控制;迭代函数系统中仿射变换的确定较复杂,而且不能描绘细节。因此,单独使用这两种算法并不是最好的选择。而将L-系统的字符串替换思想和递归算法相结合,从而找到一种能生动逼真地模拟植物形态的编程方法。2迭代函数系统和L-系统2.1迭代函数系统原理迭代函数系统(IteratedFunctionSystem)是分形绘制的典型重要方法。其采用确定性算法与随机性算法相结合的办法生成植物杆茎或叶片等分形图。“确定性”指用以迭代的规则是确定性的,它们由一组仿射变换(如R1,R2,R3等)构成;“随机性”指迭代过程是不确定的,即每一次究竟迭代哪一个规则是随机性的,设最终要生成的图形(植物形态图)为M,它要满足集合方程:M=R1∪R2∪…∪RN。公式的含义是,随机地从Ri(i=1,…,N)中挑选一个迭代规则迭代一次,然后再随机地在Ri(i=1,…,N)中选一个规则迭代一次,不断重复此过程,最后生成的极限图形M就是欲求的植物形态图。2.2L-系统原理L系统是指美国生物学家Lindenmayerl提出的植物生长的数学模型。一个串L系统是一个有序的三元素集合G=<V,ω,P>,这里ω是一个非空单词,称作公理,P是所谓产生式的有限集合,产生式写作a->x,字母a和单词x分别称作产生式的前驱和后继。令V表示字母表,V3表示V上的所有单词的集合,规定对任何V中的字母a,至少存在一个非空单词x,使得a->x。若对给定的前驱无明确解释的产生式,则规定a->a这个特殊的产生式属于P。对于L系统可以用较复杂的图形解释,在除了模拟植物分支拓扑结构外,还要加上线段长度和转角等几何形状。L系统的符号串也称“龟行图”(turtle),即设想一只乌龟在平面上爬行,乌龟的状态用三元组(X,Y,D)表示,其中X和Y分别代表横坐标和纵坐标,D代表当前的朝向。令δ是角度增量,h是步长。文中所用L系统的符号规定与解释:F——从当前位置向前移一步,步长为h,同时画线;G——从当前位置向前移一步,步长为h,但不画线;+——从当前方向逆时针转一个给定的角度δ;-——从当前方向顺时针转一个给定的角度δ;|——原地转向180°;[——Push,将龟行图当前状态压进栈(stack);]——Pop,将图形状态重置为栈顶的状态,并去掉该栈中的内容;A——记录状态的方向;Z——记录当前的位置。3分形植物模拟3.1在MATLAB中的模拟将迭代函数系统运用在MATLAB模拟软件中可得出简单的分形树,根据迭代的次数不同,得到的图形也不相同。程序代码设计如下:functiontree(n,a,b)%tree(8,pi/8,pi/8),n为分形树迭代次数%a,b为分枝与竖直方向夹角%x1,y1,x2,y2为初始线段两端点坐标,nn为迭代次数x1=0;y1=0;x2=0;y2=1;plot([x1,x2],[y1,y2])holdon[X,Y]=tree1(x1,y1,x2,y2,a,b);holdonW=tree2(X,Y);w1=W(:,1:4);w2=W(:,5:8);%w为2^k*4维矩阵,存储第k次迭代产生的分枝两端点的坐标,%w的第i(i=1,2,…,2^k)行数字对应第i个分枝两端点的坐标w=[w1;w2];fork=1:nfori=1:2^k[X,Y]=tree1(w(i,1),w(i,2),w(i,3),w(i,4),a,b);W(i,:)=tree2(X,Y);endw1=W(:,1:4);w2=W(:,5:8);w=[w1;w2];end%由每个分枝两端点坐标(x1,y1),(x2,y2)产生两新点的坐标(x3,y3),(x4,y4),画两分枝图形,并把%(x2,y2)连同新点横、纵坐标分别存储在数组X,Y中function[X,Y]=tree1(x1,y1,x2,y2,a,b)L=sqrt((x2-x1)^2+(y2-y1)^2);if(x2-x1)==0a=pi/2;elseif(x2-x1)<0a=pi+atan((y2-y1)/(x2-x1));elsea=atan((y2-y1)/(x2-x1));endendx3=x2+L*2/3*cos(a+b);y3=y2+L*2/3*sin(a+b);x4=x2+L*2/3*cos(a-b);y4=y2+L*2/3*sin(a-b);a=[x3,x2,x4];b=[y3,y2,y4];plot(a,b)axisequalholdonX=[x2,x3,x4];Y=[y2,y3,y4];%把由函数tree1生成的X,Y顺次划分为两组,分别对应两分枝两个端点的坐标,并存储在一维%数组w中functionw=tree2(X,Y)a1=X(1);b1=Y(1);a2=X(2);b2=Y(2);a3=X(1);b3=Y(1);a4=X(3);b4=Y(3);w=[a1,b1,a2,b2,a3,b3,a4,b4];在MATLAB命令窗口中输入:tree(4)可得到如图:在MATLAB命令窗口中输入:tree(6)可得到如图:在MATLAB命令窗口中输入:tree(8)可得到如图:3.2L系统的模拟L系统用于植物结构绘制,比如一棵树,它是分支结构,即一根树干带大量的分枝,每个分枝都有一个终点,是一种一个起点多个终点的图形。这就意味着在某一运算中,当画到一个分枝的尽头时画笔必须退回来再画其它结构,即产生一种所谓进退操作。该操作符号是一对方括号[·],方括号中是3个简单符号,即F,+,-。当执行完方括号中的指令后,画笔回到方括号“[”前的位置并保持原方向不变。设公理W:F;生成规则P:F→FF+[+F-F-F]-[-F+F+F];角度增量a:22.5°。在公理中,从起点往上两步后,先后作出两个分枝,而每个分枝又分别右凸左凸,最后形成一棵风吹动着树的模样。其Ltree.m.程序代码设计如下;在命令窗口运行Ltree(n),结果如图。functionLtree(n)S='F';a=pi/8;A=pi/2;z=0;zA=[0,pi/2];p='FF+[+F-F-F]-[-F+F+F]';fork=2:n;S=strrep(S,'F',p);endfigure;holdon;fork=1:length(S);switchS(k);case'F'plot([z,z+exp(i*A)],'linewidth',2);z=z+exp(i*A);case'+'A=A+a;case'-'A=A-a;case'['zA=[zA;[z,A]];case']'z=zA(end,1);A=zA(end,2);zA(end,:)=[];otherwiseendend在MATLAB命令窗口中输入:Ltree(3)可得到如图:在MATLAB命令窗口中输入:Ltree(4)可得到如图:在MATLAB命令窗口中输入:Ltree(5)可得到如图:3.3迭代函数系统与L系统的结合在生成规则中,通过递归过程的设计,即能产生预期的分形植物图形。根据生成规则P,当前n代的字符串语言描述可用表1说明。表1代字符串语言描述表迭代次数nL生产的字符串1F2F[+F]F[-F]3F[+F]F[-F][+F][+F[+F]F[-F]]F[+F]F[-F]F[+F]F[-F][-F][-F[+F]F[-F]]……将L系统的m文件代码中的P用迭代函数系统进行迭代,得到新的字符串,并取而代之,在MATLAB命令窗口中输入:Ltree(3)可得到如图:经过对比,很明显可以看出第三种方法做出的图更自然于迭代函数系统和L系统做出的图。参考文献[1]李水根.分形[M].北京:高等教育出版社,2004.[2]清源计算机工作室.MATLAB基础及其应用[M].北京:机械工业出版社,2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论