MATLAB分型植物的模擬_第1頁(yè)
MATLAB分型植物的模擬_第2頁(yè)
MATLAB分型植物的模擬_第3頁(yè)
MATLAB分型植物的模擬_第4頁(yè)
MATLAB分型植物的模擬_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

目錄TOC\o"1-2"\h\z\u1引言 12迭代函數(shù)系統(tǒng)和L-系統(tǒng) 12.1迭代函數(shù)系統(tǒng)原理 12.2L-系統(tǒng)原理 13分形植物模擬 23.1在MATLAB中的模擬 23.2L系統(tǒng)的模擬 53.3迭代函數(shù)系統(tǒng)與L系統(tǒng)的結(jié)合 7參考文獻(xiàn) 81引言隨著計(jì)算機(jī)技術(shù)的發(fā)展,分形幾何成了計(jì)算機(jī)圖形學(xué)的一個(gè)分支,它以分形幾何學(xué)為數(shù)學(xué)基礎(chǔ)構(gòu)造自相似的幾何結(jié)構(gòu),借助于計(jì)算機(jī)圖形學(xué)的支持模擬山脈、河流、地貌、云彩、植物等,產(chǎn)生人力所無(wú)法繪制的絢麗圖形,達(dá)到對(duì)自然景物的逼真模擬。自然場(chǎng)景的模擬在工程設(shè)計(jì),如道路橋梁設(shè)計(jì)、城市規(guī)劃、多媒體電影以及電子游戲中越來(lái)越受到重視。植物,尤其是樹木,作為自然場(chǎng)景中必不可少的元素,是計(jì)算機(jī)模擬的重要對(duì)象。自然界中樹的種類繁多,形態(tài)各異,計(jì)算機(jī)要模擬出逼真的圖像具有一定的難度,這也給計(jì)算機(jī)圖像模擬帶來(lái)了新的研究課題。當(dāng)前典型的分形植物模擬方法有兩種:L-系統(tǒng)和迭代函數(shù)系統(tǒng),但L-系統(tǒng)需先確定生成規(guī)則,簡(jiǎn)潔但不夠靈活,且難于編程控制;迭代函數(shù)系統(tǒng)中仿射變換的確定較復(fù)雜,而且不能描繪細(xì)節(jié)。因此,單獨(dú)使用這兩種算法并不是最好的選擇。而將L-系統(tǒng)的字符串替換思想和遞歸算法相結(jié)合,從而找到一種能生動(dòng)逼真地模擬植物形態(tài)的編程方法。2迭代函數(shù)系統(tǒng)和L-系統(tǒng)2.1迭代函數(shù)系統(tǒng)原理迭代函數(shù)系統(tǒng)(IteratedFunctionSystem)是分形繪制的典型重要方法。其采用確定性算法與隨機(jī)性算法相結(jié)合的辦法生成植物桿莖或葉片等分形圖?!按_定性”指用以迭代的規(guī)則是確定性的,它們由一組仿射變換(如R1,R2,R3等)構(gòu)成;“隨機(jī)性”指迭代過(guò)程是不確定的,即每一次究竟迭代哪一個(gè)規(guī)則是隨機(jī)性的,設(shè)最終要生成的圖形(植物形態(tài)圖)為M,它要滿足集合方程:M=R1∪R2∪…∪RN。公式的含義是,隨機(jī)地從Ri(i=1,…,N)中挑選一個(gè)迭代規(guī)則迭代一次,然后再隨機(jī)地在Ri(i=1,…,N)中選一個(gè)規(guī)則迭代一次,不斷重復(fù)此過(guò)程,最后生成的極限圖形M就是欲求的植物形態(tài)圖。2.2L-系統(tǒng)原理L系統(tǒng)是指美國(guó)生物學(xué)家Lindenmayerl提出的植物生長(zhǎng)的數(shù)學(xué)模型。一個(gè)串L系統(tǒng)是一個(gè)有序的三元素集合G=<V,ω,P>,這里ω是一個(gè)非空單詞,稱作公理,P是所謂產(chǎn)生式的有限集合,產(chǎn)生式寫作a->x,字母a和單詞x分別稱作產(chǎn)生式的前驅(qū)和后繼。令V表示字母表,V3表示V上的所有單詞的集合,規(guī)定對(duì)任何V中的字母a,至少存在一個(gè)非空單詞x,使得a->x。若對(duì)給定的前驅(qū)無(wú)明確解釋的產(chǎn)生式,則規(guī)定a->a這個(gè)特殊的產(chǎn)生式屬于P。對(duì)于L系統(tǒng)可以用較復(fù)雜的圖形解釋,在除了模擬植物分支拓?fù)浣Y(jié)構(gòu)外,還要加上線段長(zhǎng)度和轉(zhuǎn)角等幾何形狀。L系統(tǒng)的符號(hào)串也稱“龜行圖”(turtle),即設(shè)想一只烏龜在平面上爬行,烏龜?shù)臓顟B(tài)用三元組(X,Y,D)表示,其中X和Y分別代表橫坐標(biāo)和縱坐標(biāo),D代表當(dāng)前的朝向。令δ是角度增量,h是步長(zhǎng)。文中所用L系統(tǒng)的符號(hào)規(guī)定與解釋:F——從當(dāng)前位置向前移一步,步長(zhǎng)為h,同時(shí)畫線;G——從當(dāng)前位置向前移一步,步長(zhǎng)為h,但不畫線;+——從當(dāng)前方向逆時(shí)針轉(zhuǎn)一個(gè)給定的角度δ;-——從當(dāng)前方向順時(shí)針轉(zhuǎn)一個(gè)給定的角度δ;|——原地轉(zhuǎn)向180°;[——Push,將龜行圖當(dāng)前狀態(tài)壓進(jìn)棧(stack);]——Pop,將圖形狀態(tài)重置為棧頂?shù)臓顟B(tài),并去掉該棧中的內(nèi)容;A——記錄狀態(tài)的方向;Z——記錄當(dāng)前的位置。3分形植物模擬3.1在MATLAB中的模擬將迭代函數(shù)系統(tǒng)運(yùn)用在MATLAB模擬軟件中可得出簡(jiǎn)單的分形樹,根據(jù)迭代的次數(shù)不同,得到的圖形也不相同。程序代碼設(shè)計(jì)如下:functiontree(n,a,b)%tree(8,pi/8,pi/8),n為分形樹迭代次數(shù)%a,b為分枝與豎直方向夾角%x1,y1,x2,y2為初始線段兩端點(diǎn)坐標(biāo),nn為迭代次數(shù)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維矩陣,存儲(chǔ)第k次迭代產(chǎn)生的分枝兩端點(diǎn)的坐標(biāo),%w的第i(i=1,2,…,2^k)行數(shù)字對(duì)應(yīng)第i個(gè)分枝兩端點(diǎn)的坐標(biāo)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%由每個(gè)分枝兩端點(diǎn)坐標(biāo)(x1,y1),(x2,y2)產(chǎn)生兩新點(diǎn)的坐標(biāo)(x3,y3),(x4,y4),畫兩分枝圖形,并把%(x2,y2)連同新點(diǎn)橫、縱坐標(biāo)分別存儲(chǔ)在數(shù)組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];%把由函數(shù)tree1生成的X,Y順次劃分為兩組,分別對(duì)應(yīng)兩分枝兩個(gè)端點(diǎn)的坐標(biāo),并存儲(chǔ)在一維%數(shù)組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系統(tǒng)的模擬L系統(tǒng)用于植物結(jié)構(gòu)繪制,比如一棵樹,它是分支結(jié)構(gòu),即一根樹干帶大量的分枝,每個(gè)分枝都有一個(gè)終點(diǎn),是一種一個(gè)起點(diǎn)多個(gè)終點(diǎn)的圖形。這就意味著在某一運(yùn)算中,當(dāng)畫到一個(gè)分枝的盡頭時(shí)畫筆必須退回來(lái)再畫其它結(jié)構(gòu),即產(chǎn)生一種所謂進(jìn)退操作。該操作符號(hào)是一對(duì)方括號(hào)[·],方括號(hào)中是3個(gè)簡(jiǎn)單符號(hào),即F,+,-。當(dāng)執(zhí)行完方括號(hào)中的指令后,畫筆回到方括號(hào)“[”前的位置并保持原方向不變。設(shè)公理W:F;生成規(guī)則P:F→FF+[+F-F-F]-[-F+F+F];角度增量a:22.5°。在公理中,從起點(diǎn)往上兩步后,先后作出兩個(gè)分枝,而每個(gè)分枝又分別右凸左凸,最后形成一棵風(fēng)吹動(dòng)著樹的模樣。其Ltree.m.程序代碼設(shè)計(jì)如下;在命令窗口運(yùn)行Ltree(n),結(jié)果如圖。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迭代函數(shù)系統(tǒng)與L系統(tǒng)的結(jié)合在生成規(guī)則中,通過(guò)遞歸過(guò)程的設(shè)計(jì),即能產(chǎn)生預(yù)期的分形植物圖形。根據(jù)生成規(guī)則P,當(dāng)前n代的字符串語(yǔ)言描述可用表1說(shuō)明。表1代字符串語(yǔ)言描述表迭代次數(shù)nL生產(chǎn)的字符串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系統(tǒng)的m文件代碼中的P用迭代函數(shù)系統(tǒng)進(jìn)行迭代,得到新的字符串,并取而代之,在MATLAB命令窗口中輸入:Ltree(3)可得到如圖:經(jīng)過(guò)對(duì)比,很明顯可以看出第三種方法做出的圖更自然于迭代函數(shù)系統(tǒng)和L系統(tǒng)做出的圖。參考文獻(xiàn)[1]李水根.分形[M].北京:高等教育出版社,2004.[2]清源計(jì)算機(jī)工作室.MATLAB基礎(chǔ)及其應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論