典型分形模型(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],瞧瞧世界。

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