典型分形模型(Koch 曲线)

来源:互联网 发布:回转交易 知乎 编辑:程序博客网 时间:2024/05/13 22:11

- 分形的四种构成方法

(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],瞧瞧世界。

原创粉丝点击