張笑笑
摘 要 分析Koch曲線的構(gòu)造過(guò)程,然后編寫生成Koch曲線生成元的M函數(shù),通過(guò)該M函數(shù)的遞歸調(diào)用來(lái)生成Koch曲線。通過(guò)Koch曲線,便于更直觀地理解分形,獲得分形帶來(lái)的藝術(shù)美感。
【關(guān)鍵詞】分形 Koch曲線 遞歸
自然界存在許多復(fù)雜事物和現(xiàn)象,如蜿蜒曲折的海岸線、天空中奇形怪狀的云朵、錯(cuò)綜生長(zhǎng)的灌木、太空中星羅棋布的星球等,還有許多社會(huì)現(xiàn)象,如人口的分布、物價(jià)的波動(dòng)等,它們呈現(xiàn)異常復(fù)雜而毫無(wú)規(guī)則的形態(tài),但它們具有自相似性。人們把這些部分與整體以某種方式相似的形體稱為分形(fractal),在此基礎(chǔ)上,形成了研究分形性質(zhì)及其應(yīng)用的科學(xué),稱為分形理論。Koch曲線由瑞典數(shù)學(xué)家科赫(Koch)于1904年提出,是典型的分形曲線。
MATLAB(MATrix LABoratory)是頗具特色和影響的科學(xué)計(jì)算軟件,它以矩陣運(yùn)算為基礎(chǔ),將高性能的數(shù)值計(jì)算和符號(hào)計(jì)算功能、強(qiáng)大的繪圖功能、動(dòng)態(tài)系統(tǒng)仿真功能以及為數(shù)眾多的應(yīng)用工具箱集成在一起,在科學(xué)研究以及工程設(shè)計(jì)領(lǐng)域有著十分廣泛的應(yīng)用。本文以Koch曲線為例,利用MATLAB作為實(shí)現(xiàn)工具,說(shuō)明分形曲線的生成方法。
1 Koch曲線的構(gòu)造過(guò)程
Koch曲線的構(gòu)造過(guò)程是,取一條直線段L0,將其三等分,保留兩端的線段,將中間的一段用以該線段為邊的等邊三角形的另外兩邊代替,得到曲線L1,如圖1所示。再對(duì)L1中的4條線段都按上述方式修改,得到曲線L2,如此繼續(xù)下去進(jìn)行n次修改得到曲線Ln,當(dāng)n→∞時(shí)得到一條連續(xù)曲線L,這條曲線L就稱為Koch曲線。
Koch曲線將每條直線用一條折線替代,這條折線通常稱為該Koch曲線的生成元。曲線的特征完全由生成元決定。給定不同的生成元,就可以生成各種不同的分形曲線。分形曲線的構(gòu)造過(guò)程是通過(guò)反復(fù)用一個(gè)生成元來(lái)取代每一直線段,因而圖形的每一部分都和它本身的形狀相同,這就是自相似性,這是分形最為本質(zhì)的特點(diǎn)。
對(duì)于給定的初始直線L0,需要在線段P1P5中插入三個(gè)點(diǎn),其中P2,P4為線段P1P5的三等分點(diǎn), P3可以由P4以P2為軸心逆時(shí)針旋轉(zhuǎn)60°得到。
先考慮坐標(biāo)數(shù)據(jù)的處理方法,即根據(jù)P1,P5兩點(diǎn)的初始坐標(biāo),按照Koch曲線的構(gòu)成原理計(jì)算出 P2,P3,P4各點(diǎn)坐標(biāo)。顯然:
P2=P1+(P5-P1)/3
P4=P1+2( P5-P1)/3
為了得到P3點(diǎn)坐標(biāo),引入旋轉(zhuǎn)矩陣。點(diǎn)A對(duì)應(yīng)于長(zhǎng)度為r的向量,A逆時(shí)針旋轉(zhuǎn)△θrad得到B,如圖2所示。
由此,定義旋轉(zhuǎn)矩陣:
則
B=ART
P3點(diǎn)坐標(biāo)可以由以下旋轉(zhuǎn)矩陣來(lái)實(shí)現(xiàn)。
R用于對(duì)坐標(biāo)進(jìn)行60°的旋轉(zhuǎn),則P3點(diǎn)坐標(biāo)可以由如下的公式得到:
2 Koch曲線的實(shí)現(xiàn)
分形曲線的構(gòu)造過(guò)程也決定了生成該曲線可以用遞歸方法,即函數(shù)自己調(diào)用自己的過(guò)程。定義對(duì)直線L0進(jìn)行替換的函數(shù)koch(),然后利用函數(shù)的遞歸調(diào)用,分別對(duì)P1P2、P2P3、P3P4、P4P5線段調(diào)用koch函數(shù),通過(guò)遞歸來(lái)實(shí)現(xiàn)替換。程序不能像數(shù)學(xué)家的設(shè)想那樣運(yùn)算至無(wú)窮,所以要根據(jù)要顯示的最小長(zhǎng)度作為遞歸的終止條件。
首先編寫M函數(shù)koch.m如下:
function y=koch(P1,P5,Level)
if Level<1
plot([P1(1),P5(1)],[P1(2),P5(2)],'k'); %繪制曲線
hold on;
else
R=[cos(pi/3),-sin(pi/3);sin(pi/3),cos(pi/3)]; %旋轉(zhuǎn)矩陣
P2=P1+(P5-P1)/3; %計(jì)算P2,P3,P4各點(diǎn)坐標(biāo)
P4=P1+2*(P5-P1)/3;
P3=P1+(P5-P1)/3+(P5-P1)*R'/3;
koch(P1,P2,Level-1); %函數(shù)遞歸調(diào)用
koch(P2,P3,Level-1);
koch(P3,P4,Level-1);
koch(P4,P5,Level-1);
end
M函數(shù)編寫完成后,編寫以下程序。
koch([0,0],[1,0],5);
axis equal
axis([0,1,-0.05,0.35])
程序取Level=5,P1=[0,0],P5=[1,0],運(yùn)行結(jié)果如圖3所示。改變Level的值可以獲得不同細(xì)膩程度的Koch曲線。
在程序中三次調(diào)用koch.m函數(shù),實(shí)現(xiàn)三角形三條邊各自的Koch曲線,形成Koch雪花曲線效果。編寫以下程序,其運(yùn)行結(jié)果如圖4所示。
koch([1,0],[0,0],5);
koch([0,0],[cos(pi/3),sin(pi/3)],5);
koch([cos(pi/3),sin(pi/3)],[1,0],5);
axis equal
3 Koch曲線的變形
參照本文的方法,我們很容易自己構(gòu)造其他生成元的Koch曲線,并利用MATLAB來(lái)實(shí)現(xiàn)。例如,修改Koch曲線生成的方法,將線段中凸起“三角形”改為凸起“正方形”,從而形成一種正方形雪花曲線,如圖5所示。
4 結(jié)束語(yǔ)
分形幾何是一門以不規(guī)則幾何形態(tài)為研究對(duì)象的幾何學(xué)。由于不規(guī)則現(xiàn)象在自然界普遍存在,因此分形幾何學(xué)又被稱為描述大自然的幾何學(xué)。分形幾何學(xué)建立以后,很快就引起了各個(gè)學(xué)科領(lǐng)域的關(guān)注,不僅在理論上,而且在實(shí)用上分形幾何都具有重要價(jià)值。通過(guò)利用計(jì)算機(jī)和MATLAB來(lái)生成分形曲線的圖像,使得我們可以更直觀的感受和理解分形,以及分形帶來(lái)的藝術(shù)之美。
參考文獻(xiàn)
[1]百度百科.分形理論.http://baike.baidu.com/view/86848.htm.
[2]劉衛(wèi)國(guó).MATLAB程序設(shè)計(jì)教程(第二版)[M].北京:中國(guó)水利水電出版社,2010.
[3]PRATAP R.Getting Started with MATLAB: A Quick Introduction for Scientists and Engineers.Oxford University Press, New York, 2009.
[4]百度文庫(kù).幾個(gè)分形的matlab實(shí)現(xiàn).http://wenku.baidu.com/view/e34f87240722192e4536f659.html.
作者單位
湖南省長(zhǎng)沙市第一中學(xué) 湖南省長(zhǎng)沙市 410005