日期:2013-4-13 浏览次数:20218次

  首先看一下用程序生成的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==’A’)
              {
                     将qA中的字符逐个出队
                     {
                            如果遇到的是替换法则相对应的字符,则将替换法则中的字符逐个入队qB.
                            如果不是,则将当前qA中的出队字符直接入qB。
}
}
 
              if(Sign==’B’)
              {
                     将qB中的字符逐个出队
                     {
                            如果遇到的是替换法则相对应的字符,则将替换法则中的字符逐个入队qA.