[
分形幾何
]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 程式執行或執行時,作業系統將可執行模組拷貝到主儲存器的程式映象...