载入中
  • 题目:植物的枝的分形算法
  • 作者:佚名
  • 发表日期:十月 02, 2007
  • 浏览:246次
  • 收藏本文
  • 编者导读:字符串替换算法 并不局限于绘制比较"规则 "的分形,而且可以用来绘制"分形树"一类很复杂的分形.这种图形与自然界中的植物的枝干极为相似换句话说可以用这处算法对自然界的实物进行模拟,并达到很好的效果,它也像IFS方法一样是一种信息压缩的收手段.     引进下列记号:   &nbs...
  • 字符串替换算法 并不局限于绘制比较"规则 "的分形,而且可以用来绘制"分形树"一类很复杂的分形.这种图形与自然界中的植物的枝干极为相似换句话说可以用这处算法对自然界的实物进行模拟,并达到很好的效果,它也像IFS方法一样是一种信息压缩的收手段.
        引进下列记号:
        A:沿逆时针方向角度 ;
        B:沿顺时针方向转角度;
        C:当前状态栈记录当前点的坐标,及角度)
        D:出(取最近的一次 压入骱的信息 , 同时修改指针);
        从当前点开始沿当前方向 画一线段E,G,H,I,J这些字符 在下次迭代中将分别被E $.G $.H $,I$,及J$所替代.其中
        E$="EI"
        G$="BHCAGDI"
        H$="AGCBHDI"
        I$="CAFFFDCBFFFDF"
        J$="CBBBGDCAAAGDEJ"
        迭代规则如下:
        第一步图形为P(1)$="JIFFF",若第k步图形为P(K)$,则第k+1步的图形P(k+1)$是将PP(K)$中的所有E.G.H.I.J这些字符分别用E$.G$,.H$,I$,及J$来替换,其它字符不变而得到的 ,角度 =/10.需要指出的是:在每次线段长度L(K+K)不像von Koch曲线那样,存在一简单关系:L(k+1)=L(k)/3.因此在这个问题上,应上机调试以选择合适的比列因子---使得图形不超出屏幕之外,也不太小.

    源程序如下:
     
    10  ''''''''Fractal Tree  

     
     
    20  KEY OFF:SCREEN 2:WINDOW(0,0)-(4/3,1): 
        N=11:PI=3.141593 
    30   P="JIFFFK":J$="CBBBGDCAAAGDEJ": 
        G$="BHCAGDI":H$"AGCBHDI" 
    35   E$="EI":I$="CAFFFDCBFFFDF": 
        ANGLE=PI/10:L=3 
    40  DEF SEG=&H7000:ADR1=0: 
        DIM X(40),Y(40),L(11),A(40) 
    50  FOR I=1 TO LEN(P$) 
    60  POKE ADR1,ASC(MID$(P$,I,1)): 
        ADR1=ADR1+1:NEXT I 
    65  L(1)=1/3:L(2)=.25:L(3)=.9:L(4)=.9: 
        L(5)=.8:L(6)=.65:L(7)=.68:L(8)=.73: 
        L(9)=.77:L(10)=.77:L(11)=.8 
    70  FOR I=1 TO N:CLS:A=0:L=L*L(I): 
        PSET(2/3,0):ADR1=0:X=2/3:Y=0 
    90  ON PEEK(ADR1)-64 GOTO 100,110,126,127,130,120,130,130,130,130,140 
    100 A=A+1:GOTO 130 
    110 A=A-1:GOTO 130 
    120 LINE -STEP(L*COS(A*ANGLE+PI/2),L*SIN(A*ANGLE+PI/2)) 
    125 X=X+L*COS(A*ANGLE+PI/2):   
        Y=Y+L*SIN(A*ANGLE+PI/2):GOTO 130   
    126 ST=ST+1:X(ST)=X:Y(ST)=Y:   
        A(ST)=A:GOTO 130   
    127 X=X(ST):Y=Y(ST):A=A(ST):ST=ST-1:PSET(X,Y)   
    130 ADR1=ADR1+1:GOTO 90   
    140 ADR2=&HFFF:IF I=11 THEN 145 ELSE 150   
    145 IFINKEY $=""THEN 145 ELSE END   
    150 WHILE ADR1+1   
    160 ON PEEK(ARR1)-64 GOTO 170,170,170,170,180,170,181,182,183,184,170   
    170 PIKE ADR2,PEEK(ADR1):GOTO 190   
    180 Q$=E$:GOSUB 250:GOTO 190   
    181 Q$=G$:GOSUB 250:GOTO 190   
    182 Q$=H$GOSUB 250 :GOKO 190   
    183 Q$=I$:GOSUB 250 :GOTO 190   
    184 Q$=J$:GOSUB 250 :GOTO 190   
    190 ADR1=ADR1-1:ADR2=ADR2-1   
    200 WEND   
    210 WHILE ADR2:ADR1=ADR1+1:ADR2=ADR2+1`   
    220 POKE ADER1,PEEK(ADR2):WEND   
    225 IF I<N AND INKEY $=""THEN 225   
    230 NEXT I:END   
    250 FOR J=1 TO LEN(Q$)   
    260 POKE ADR2,ASC   
        (MID$(Q$,LEN(Q$)-J+1,1))   
    270 ADR2=ADR2-1:NEXT J:ADR2=ADR2+1:RETUTN 

  • 【引用地址】http://www.suanshu.net/test.aspx
  • 【关键字】题目:植物的枝的分形算法
载入中
版权申明:非特殊申明,本站文章均系转载自互联网,如果侵犯了你的合法权益,请告知我们,我们会第一时间处理. 要点评这篇文章,请在下面留言
针对这篇文章的评论
  • 评论载入中
    评论载入中...请稍后...

发表您的评论您的评论

用户名: 验证码: 说明:评论并不需要注册.如果您不是本站会员,你可以注册为本站会员. 注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
  • 不良评论请用报告管理员,以利管理员及时删除。
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规。
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任。
  • 本站评论管理人员有权保留或删除其管辖评论中的任意内容。
  • 您在本站发表的作品,本站有权在网站内转载或引用。
  • 参与本评论即表明您已经阅读并接受上述条款。

赞助商链接