L-systems之研究与应用_第1页
L-systems之研究与应用_第2页
L-systems之研究与应用_第3页
L-systems之研究与应用_第4页
L-systems之研究与应用_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、L-systems之研究與應用 范雅婷、趙懿柳指導老師:葉耀明教授、陳怡芬老師就讀學校:北一女中一、 研究動機:發現碎形之美。且目前一般圖形檔案格式過於龐大,欲達成經濟效益,藉由程式用字串的觀念來處理具有相似性的圖形。二、 研究目的:L-system4.0之作者自定出一套語法,藉由他的語法了解其中的優缺點,並能充分運用其特色,建立一資料庫,製作出具有意義的圖形語法。進而欲從其中找出規則整理成資料庫,以建立一個在這個軟體之上的應用環境。讓使用者可以不必親自學習語法而可以利用可親介面直接達到畫樹的功能。三、 研究工具:L-system4.0Visual Basic6.0四、 研究內容:1. L-s

2、ystem概述:Lindenmayer systems簡稱L-systems是一個模擬植物生長的數學理論。其重點是在強調植物的拓樸學,也就是說,其種子和植物個體的生長關係。L-systems中的幾何理論常被用在模擬樹的生長。L-systems是由圓角長方形在一維空間裡連接而成,通常是用來繪製基本碎形,在1974年Frijters,Lindenmayre,Hogeweg和Hesper為了繪製更複雜的高等植物,就增加了角度變化以及長度變化。在此之後,即有許多人投入研究,使其發展得更為成熟。2. L-systems的語法:L-systems主要是利用文字代替圖形,其列表如下:COMMANDSDraw

3、ing:Structure:FDraw full unit Store current locationZDraw half unitReturn to locationMovement:Start polygon shapefMove full unitEnd polygon shapezMove half unitIncrement / Decrement:Orientation:" Inc. length by 1.1+Turn left'Dec. length by 0.9-Turn right;Inc. angle by 1.1&Pitch down:Dec

4、. angle by 0.9Pitch up?Inc. thickness by 1.4<Roll left !Dec. thickness by 0.7>Roll rightAdditional:Special Orientation:c Increment color index| Turn 180 degc(x)Set color index to xRoll 180 degEnd of file$Roll until Horizontal#CommentTurn/Pitch/RolltPitch down 註:關於顏色的變化如下表c(1)綠c(8)土黃c(2)藍綠c(9)亮

5、紫c(3)亮綠c(10)亮黃c(4)亮藍綠c(11)灰c(5)寶藍c(12)銀灰c(6)紫defaultc(1)綠3. 程式結構:範例:4遞迴次數60預設角度5寬度(厚度)為長度的5%&(90)F-F-F起始方向和種子F=F+FF+F規則一結束符號4. Edge rewriting此範例為Edge rewriting ,所謂Edge rewriting即是用前一次依規則跑出來的圖形取代此次的線段,逐次分析如下:4逐次分析”F”1. F=F+F-F+F2. F= F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F3. F= F+F-F+F + F+F-F+F -

6、F+F-F+F + F+F-F+F + +F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F- F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F 4. F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F+ F+F-F+F- F+F-F+F+ F+F-F+F - F+F-F+F+ F+F-F+F+ F+F-F+F+ F+F-F+F- F+F-F+F+ F+F-F+F+F+F-F+F+ F+

7、F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+

8、F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F + F+F-F+F + F+F-F+F - F+F-F+F + F+F-F+F605&(90)F-FFF= F+F-F+F5. Node rewriting7逐次分析”X”1. X=F+F-+2. X=F+F+F-+F-F+F-+F+F-+3. X= F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F+F+F-+F-F+F

9、-+4. X= F+F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F-F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+5. X= F+F+F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F-F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F-F+F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F-F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F+F+F+F+F-+F-F+F-+F-F+F+F-+F-F+F-+F-F+F+F+F-+F

10、-F+F-+F-F+F+F-+F-F+F-+201&(90)+(90)XX=F+XF-X+XF=FF此範例為Node rewriting,既edge rewriting之後,欲在每次取代中增加一些線段,就此產生了edge rewriting。為了達此目的,L-systems就擴充了其他除了”F” 和”Z”繪圖符號之外本身不具有繪製或移動的符號。所謂Node rewriting就是把原有的每個規則用其上一次所產生的形狀代入,且第一次為無值(即不繪製線條亦不移動位置),所以不包括F, Z, f, z。看這個範例,以X為一個規則(第5行),第一次為無值,直接掠過,第二次就用第一次產生的”F+

11、F-+”為第二次的X代入值,且每條直線都是兩線段(第6行),依此類推,直到第七次(第1行),並輸出第七次的圖形。7. 比較edge rewriting和node rewriting#Edge rewriting#Node rewriting33909011&(90)+(90)Fl&(90)+(90)FlFl=Fl+Fr+l=l+rF +Fr=-Fl-Frr=-Fl-r8. 樹的解析把seed的部分改成局部(例如: A, B, L),視表格中的英文字母為依據,而表格中的數字則是表示程式碼中的第一行迴圈次數的實際數字,所以會出現空白欄的現象。”#”在程式碼中為註解符號,有加”#”該

12、行之後的文字都跳過。結構一103040c(12)AA=aaSaaSAS='(.8)!(.9)a=tF&'(.8)!LBL>(137)z&'(.7)!LBL>(137)B=tF-'(.8)!(.9)$LCL'!(.9)CC=tF+'(.8)!(.9)$LBL'!(.9)B# C比B慢一回。# C和B只有在互為B或C的地方交換其餘皆相同時,利用相互的呼叫(B中有C,C中有B)來達到本身遞迴的效果。L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)#葉子下表中的A即是這個圖的整個程式的圖,因

13、為種子剛好是A所以出來的結果是相同的。惟(A1)代表此程式跑一次遞迴的成果。完成圖結構二103020#c(12)FAL#A=F&'(.7)!BL>(137)&'(.6)!BL>(137)'(.9)!(.9)AB=F-'(.7)!(.9)$CL'(.9)!(.9)CC=F+'(.7)!(.9)$BL'(.9)!(.9)B#C比B慢一次,但兩者之圖形除左右不同外皆相同L=c(8)+(45)f(10)-(45)f(20)-(45)f(10)+(45)|+(45)f(10)-(45)f(20)-(45)f(10)#葉子

14、(A1)(A2)(A3)(A4)(B1)(B2)(B3)(B4)此時尚未成型(C1)(C2)(C3)(C4)此時尚未成型此時尚未成型(L1)(全1)(全2)(全3)(全4)完成圖9. 一行樹# 這個檔案的重點在於畫出一排的樹14530&(90)H #種子H=f(1500)TcH# 重點:向前移動並種下一棵樹T=(90)FFS# 本程式中實際畫樹的規則S=FFR>(120)R>(120)R>(60)S# 表示有三段分支R=Ba# 單一分支的規則a=$tFCxFb# 每一片葉b=$tFDyFaB=&B# 角度變化C=+CD=-Dx=a# 延後兩次生長y=bF=&#

15、39;(1.25)F'(.8)# 把變化的長度變回來看這支範例,姑且不論他的樹型如何,現在唯一要深究的就是重點的那一行,就憑著這一行的規則,使得這支範例可以畫出所謂的一排樹。f(1500)TcH的意義,我們逐一來翻譯。f(1500)就是移動距離1500,也就是說是樹與樹之間的間格距離;T是呼叫下面的T規則,就是畫每一棵樹的規則;c是變色的意思,所以看到的每一棵樹都有不同的顏色。而最後的H讓它每一次都把前一次的紀錄代到下一次裡,不然就沒辦法表現出一排不同時期的樹了。完成圖 10. 樹葉統整:於此程式之範例中,有許多不同種類的葉子,於此做整理:l=c(8)+f-ff-f+|+f-ff-fL

16、=c(8)-f+f+f-|-f+f+fL=f(200)c(8)+(30)f(200)-(120)f(200)-(120)f(200)L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)11. 樹型變幻:演算法解說:規則均相同,以參數來造成外觀的不同。8 單軸植物:Tree00行號程式註解110字串代換次數245預設分支角度315預設厚度與長度的百分比4c(12)+(90)FFAL起始5A=F&'(.8)!BL>(137)'!(.9)A規則:開始分枝時的主幹規則6B=F-'(.8)!(.9)$CL'!(.9)C規則:分枝規則7

17、C=F+'(.8)!(.9)$BL'!(.9)B規則:分枝規則8L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)樹葉9結束各行程式意義解說:l 第一行:字串代換數次數越大,則樹齡越大,圖示如下次數5710外型l 第二行:預設分支角度角度愈小,則枝葉愈向上集中,下表以圖示表示其變化角度254560外型l 第三行:預設厚度與長度的百分比,可控制樹幹的粗細厚度11550外型l 第四行:c(12)指定枝幹顏色+(90)將樹轉正FF未開始分枝的主幹AL開始分枝的主幹在,即規則中指定l 第五行:主幹開始分枝後的規則A=F先往前生長一段&'(.8)

18、!BL以預設的角度分枝,分枝後生長法在即規則,指定,本子句即說明樹木的第一層分枝的情況,其中'(.8)是指第一層分枝縮短的比例,是故,該數字愈小,樹型愈呈尖銳,如下表所示:數字0.30.60.9外型>(137)俯視時分枝的角度即平行於地面時,第一層分枝兩兩間的角度NOTE:這些分枝並不在同一高度,是故假设角度較小,可形成類式螺旋的效果。'!(.9)分枝後主幹縮短亦變細&'(.8)!BL中之&假设換為$,則會出現特殊剪裁的樹形!(.9)A重覆前述再生長一節主幹以及一節分枝,但枝條變短且變細,假设更改其數目,則可畫出枝條粗細不同的樹數字0.10.50.

19、9外型l 第六行:分枝規則規則B=F生長一段-'(.8)!(.9)$CL分枝,其中的'(.8)指第二層以後分枝縮短比例,是故數字愈小,則主幹以及第一層分枝愈明顯,即樹將愈稀疏,如下表:數字0.20.50.8外型'!(.9)C再套用同樣規則生長,並把分枝縮短,變細。l 第七行:同第六行,本行為遞迴之用。l 第八行:樹葉,指定顏色及形狀三角型,在前幾行有加上之處即是要加上樹葉之處。樹葉亦可置換成不同類型的葉子樹葉L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)外型樹葉L=c(8)+f-ff-f+|+f-fffL=c(8)-f+f+f-|-f+f+

20、f外型8 轉軸植物:Tree04行號程式註解110字串代換次數230預設角度340預設厚度與長度百分比4c(12)A起始5A=aaSaaSA規則一:將小段a連接6S='(.8)!(.9)規則二:分枝縮短變細比例7a=tF&'(.8)!LBL>(137)z&'(.7)!LBL>(137)規則三:串連分枝,使分枝旋轉向上生長8B=tF-'(.8)!(.9)$LCL'!(.9)C規則四:分枝規則9C=tF+'(.8)!(.9)$LBL'!(.9)B規則五:分枝規則10L=c(8)+(30)f(20)-(120)f(2

21、0)-(120)f(20)樹葉11結束符號各行程式意義解說:l 第一行:字串代換次數字串代換越多次,則樹的分枝越複雜,由外觀來看,則樹齡越大。次數81011外觀l 第二行:預設角度改變此項參數,則其所轉的角度即不同,其最明顯的變化是枝葉下垂的程度。角度213038外觀l 第三行:預設厚度與長度百分比改變此參數可改變樹幹之粗細。粗細104065外觀l 第五行:A=aaSaaSA此行為其主幹部分,此範例之主幹乃由小段a旋轉連接而成l 第六行:S='(.8)!(.9)此行乃是使線段變短和變細,所以小段a會逐漸縮短,假设控制'(.8)部分的參數,則可改變其樹高。數字0.70.80.9外

22、觀l 第七行:a=tF&'(.8)!LBL>(137)z&'(.7)!LBL>(137)此行即為先前所提過的小段a,小段a又是由分枝B所構成,分枝B及由分枝規則B和分枝規則C所形成的結果。在此行程式中,前後兩個中括號和為一個分枝,兩個括號中各有'(.8)和'(.7),假设將此兩個參數一起做改變,即改變了分枝和主幹線段的縮短比例,而造成在樹寬上的不同。數字0.50.81.0外觀l 第八行:B=tF-'(.8)!(.9)$LCL'!(.9)C第九行:C=tF+'(.8)!(.9)$LBL'!(.9)B此兩行

23、為分枝之規則,在第八行及第九行中的'(.8),是控制分枝中之小分枝和主分枝之間的縮短比例,假设一起改變此兩項可畫出葉子疏密不同的樹。數字0.20.80.9外觀l 第十行:此行為樹葉,共有四種樹葉代換葉子L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)外觀葉子L=c(8)+f-ff-f+|+f-ff-fL=c(8)-f+f+f-|-f+f+f外觀8 轉軸植物:Tree06行號程式註解18字串代換次數230預設角度340預設厚度與長度百分比4A起始5A=aaSaaSaaSaaSaaSaaSaaSaaSaaSaaB規則一:主幹部分6S='(.9)!(.9)

24、規則二:線段縮短變細比例7a=tF&'(.8)!LBL|zL>(137)z&'(.7)!LBL|zL>(137)規則三:串連分枝,使分枝於旋轉向上生長8B=tFL-'(.8)!(.9)$LCL|zL'(.9)!(.9)C規則四:分枝規則9C=tFL+'(.8)!(.9)$LBL|zL'(.9)!(.9)B規則五:分枝規則10L=c(8)+(30)f(20)-(120)f(20)-(120)f(20)樹葉11結束符號各行程式意義解說:l 第一行:字串代換次數字串代換次數越多,則樹的結構越複雜,由外觀看來,即樹齡越大。次數

25、689外觀l 第二行:預設角度此角度為其轉方向是所用的角度,假设改變此參數,其最明顯的變化是枝葉下垂的程度。角度253050外觀l 第三行:預設厚度與長度百分比改變此參數可改變樹幹之粗細。粗細104065外觀l 第五行:A=aaSaaSaaSaaSaaSaaSaaSaaSaaSaaB此為其主幹部分,此其為將小段a連接,逐次縮短長度,並將前次所生成的B置於最頂端。l 第六行:S='(.9)!(.9)此行乃是使其線段變短和變細,所以小段a會逐次變細,假设改變此參數則可使其樹高改變。數字0.70.80.9外觀l 第七行:a=tF&'(.8)!LBL|zL>(137)z&'(.7)!LBL|zL>(137)此行即為構成主幹的小段a,它先向上生長一段,再連接分枝B,此小段a乃由分枝B所構成,而分枝B是由分枝規則B和分枝規則C所形成。在第七行中,第一個中括號中有'(.8),而第二個中括號有'(.7),假设同時改變此二參數兩個同時加減則可控制其枝葉伸展的寬度,即樹寬數字0.60.81.0外觀l 第八行:B=tFL-'(.8)!(.9)$LCL|zL'(.9)!(.9)C第九行:C=tFL+'(.8)!(.

温馨提示

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

评论

0/150

提交评论