典型分形模型(Koch 曲線)

- 分形的四種構成方法

(1)基於L系統的分形模型
(2)迭代函數系統模型
(3)粒子系統模型
(4)隨機插值模型


- Koch 曲線

( 1 ) Koch 曲線的生成規則
 Koch 曲線是 Von Koch 於1904年第一次描述的。它的構造是:迭代初始把原線段去掉中間的三分之一,代之以底邊在被去線段上的等邊三角形的兩腰;以後每一步的迭代都是這樣的重複。


從以上過程可以清楚地看出,Koch曲線(其它分形集也是如此)可以由簡單的圖,稱爲 生成元 ,迭代產生。
在這裏,Koch曲線的生成元是:

在這裏,假如我們約定好記號,就可以把Koch曲線的生成元的構造用一個字符串符號表示出來。設:

曲線由把每一折線段反覆迭代成縮小比例的三分之一的生成元而成。即字符串T= F L F R R F L F 中的每一個F 又是字符串 T 本身。而每次迭代
後,生成的曲線長是原來曲線長的三分之四倍。可見,無數次迭代後Koch 曲線將變得具有無限長度。並且,Koch 曲線是永遠不自相交的。


( 2 ) 生成Koch 曲線的程序
函數 side( ),用於繪製Koch 曲線的生成元,函數中所用的參數爲:
 

xa, ya, xb, yb :線段的起點和終點座標;
 a : 線段的方向角;
 n : 迭代次數(遞歸深度)。

 

void  side ( xa, ya, xb, yb, a, n )
    int n ; float xa, ya, xb, yb, a ;
   { float x1, y1, x2, y2, x3, y3, dl, a1, a2 ;
      int xs, ys, xe, ye ;
      if (n==0)
     { 
        xs=(int)(xa+0.5) ; ys=(int)(ya+0.5) ; 
        xe=(int)(xb+0.5) ; ye=(int)(yb+0.5) ;
       moveto(xs,480-ys) ; lineto(xe,480-ye);
       }
       else
       { 
  dl=sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya)) / 3. ;
      x1=xa+(xb-xa) / 3. ; y1=ya+(yb-ya) / 3. ;
      side(xa, ya, x1, y1, a, n-1) ;
      a1=a+AF ;
      x2=x1+dl*cos(a1) ;
      y2=y1+dl*sin(a1) ;
      side(x1, y1, x2, y2, a1, n-1) ;
 a2=a1-2.*AF ;
       x3=x2+dl*cos(a2) ;
       y3=y2+dl*sin(a2) ;
       side(x2, y2, x3, y3, a2, n-1) ;
       side(x3, y3, xb, yb, a, n-1) ;         
       }  } 

( 3 ) Koch 曲線的維數
一個幾何對象的維數還可以從測量的角度來定義:
  D=ln(N) / ln(S)
 其中:D 維數
    S 縮小系數的倒數
    N 每步的分段數

在Koch曲線中,S=3 ( 縮小系數是
 1/3 );N=4。
 所以Koch曲線的維數爲:
 D=ln(4) / ln(3)

依據 Koch 曲線的生成原理,設計不
 同的生成元,便可以構畫出多種多樣
 的分形曲線。


這是一隻編程小喵,經常出沒在喵屋[AudioMiao]中,挖挖[喵的Github],瞧瞧世界。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章