分形幾何,AS2 L系統程式設計的實現

2021-04-02 01:52:23 字數 2853 閱讀 2030

[

分形幾何

]l系統程式設計的實現

.

emilmatthew

05/11/15

首先看一下用程式生成的

knoch

曲線,在迭代次數不同情況下的變化

顯然,你可以清楚的感覺到

knoch

曲線在面積上為

0,在長度上不斷擴大特性

(在給定的尺度下有乙個上限值

)和這個

knoch

曲線相類似的圖形還有

sierpinski

三角形如下

那麼,具體到程式上,這樣的圖形是如何繪製的呢,這類圖形的繪製在分形幾何上有個相關的領域,叫做

l系統,這是一種基於字串技術的繪製圖形技術,就像

logo

語言那像,通過解釋命令字串,來控制畫筆的移動:比如

:f

代表在當前的位置方向向前移動

+從當前的方向向左轉乙個給定的角度.-

從當前的方向向右轉乙個給定的角度.…

像knoch

的生成命令為

:(在乙個叫做

fractint19.5的l

系統的軟體上)

axiom f;

初始狀態

,一根直線

f=f+f—f+f;

迭代法則,每次在前一次的命令字串中的

f用這個規則去替換

.在達到規定的迭代次數後,便可以從字串頭部向後解釋命令繪製出相應的圖形

.那麼,具體到程式上,這樣的迭代如何去實現呢

.(這裡我還沒能力實現乙個通用的解釋程式,只談最關鍵的迭代的實現

)我認為乙個比較好的相法是這樣:

設定兩個佇列

(字元佇列

,每個佇列結點上存放乙個元字元

)qa,qb

,開始時

:qa存放初始情況下的字元

,qb為空

.i=1

sign=』a』

while(i<

迭代次數上限)}

if(sign==』b』)

}i

ß

i+1

}下面給出在

as2語言中這種演算法的實現

:for(i=0;i<_root.ginitstring.length;i++)

queuea.enqueue(string(_root.ginitstring.charat(i)));

i=0;

sign=_root.sign_a;

//produce the drawing string.

while(i<_root.giteratorlimit)

else if(tmpdata=="+"||tmpdata=="-"||tmpdata=="|")

queueb.enqueue(tmpdata);

}sign=_root.sign_b;

}else if(sign==_root.sign_b)

sign=_root.sign_a;

}i++;

}//copy to drawcmdstr.

drawcmdstr="";

if (sign==_root.sign_a)

while(!queuea.isempty())

drawcmdstr+=string(queuea.dequeue());

else

while(!queueb.isempty())

drawcmdstr+=string(queueb.dequeue());

//the core draw sub.

var myvector:e2dvector=new e2dvector(0,0);//the move cursor

_root.giteratortimes=0;

_root.gcmdlen=0;

_root.gcurarc=0;

_root.gintervalid=setinterval(kochcurve,_root.gfps,myvector,drawcmdstr);

繪製的過程是簡單的,就是乙個根據字串的命令不斷更新畫圖位置的過程:這是

koch

曲線的繪製過程

:function kochcurve(invector:e2dvector,incmddrawstr:string):void

}else if(tmpstr=="+")

else if(tmpstr=="-")

else

i++;

_root.gcmdlen++;

//trace(_root.gcmdlen);

}if(_root.gcmdlen==incmddrawstr.length)

_root.clearinterval(_root.gintervalid);}與

knoch

不同的是

sierpinksi

三角形的命令中多了乙個

x,它的意思是,該字元只在迭代時有效,在具體繪圖時,跳過不做即是.:

//。歡迎提出批評與指正意見

.

Linux系統程式設計(2) 程序概念

程序 乙個可執行程式跑起來,作業系統就建立乙個程序。ps 顯示當前程序 ps aux 顯示當前所有程序 ps aux less 分頁顯示所有程序 方便檢視 注 前幾個資訊是 user 程序建立使用者 pid 身份識別符號 cpu占用 mem 記憶體占用空間.ps aux grep test 程序名 ...

《Linux UNIX系統程式設計手冊》第2章讀書筆記

寫在前面的話 紅燭啊!你流一滴淚,灰一分心。灰心流淚你的果,創造光明你的因。紅燭啊!莫問收穫,但問耕耘。第2章 基本概念 本章講了很多基本概念,有的概念會貫穿全書,有的概念作者只簡單提了一下,後面的章節會有深入講解。對於這些概念,博主不一一介紹,而是將其中有聯絡的概念放到一起說。一 linux系統的...

Unix系統程式設計筆記 2 程式 程序 執行緒

1 程式怎麼轉換成程序 程式 program 是為了完成特定的任務而準備好的乙個指令序列。c編譯器將每個原始檔翻譯成乙個目標檔案,然後編譯器將這些單個的目標檔案同必須的一些庫相鏈結,形成乙個可執行模組 executable module 程式執行或執行時,作業系統將可執行模組拷貝到主儲存器的程式映象...