NCF参数化建筑论坛

标题: 元胞自动机脚本 [打印本页]

作者: panhao1    时间: 2009-12-25 13:32
标题: 元胞自动机脚本
CA in rhinoscript:

网上看到的不错的版本 运行有bug的话 我会帮忙改 (群里叫紫暗)
Option Explicit
'1 dimensional Cellular automata

Call Main()
Sub Main()
      'define the starting condition
     Dim strGen
      strGen = "0,1,0,0,1,0,0,1,0,1,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0"
      Dim intHowMany : intHowMany = Rhino.GetInteger ("how many generations should I plot?", 20)
      Dim j
      For j=0 To intHowMany

          dim arrTokens : arrTokens = rhino.strtok(strGen, ",")
          Dim i
          For i=0 To Ubound(arrTokens)
              Dim strCurrentChar : strCurrentChar = arrTokens(i)
              Dim arrPoint       : arrPoint       = array(i,j,0)
              'Dim strTextDotID   : strTextDotID   = Rhino.AddTextDot (strCurrentChar, arrPoint)
             Dim strObjectID    : strObjectID    = Rhino.AddSrfPt (array(array((i-.5),(j-.5),0),array((i-.5),(j+.5),0),array((i+.5),(j+.5),0),array((i+.5),(j-.5),0)))         
              if strCurrentChar=0 Then
                 'Call Rhino.ObjectColor ( strTextDotID, RGB(250,250,250) )
                Call Rhino.ObjectColor ( strObjectID,  RGB(250,250,250) )
              Else
                 'Call Rhino.ObjectColor ( strTextDotID, RGB(0,0,0) )
                Call Rhino.ObjectColor ( strObjectID,  RGB(0,0,0) )
              End if
           Next
           strGen = NextGeneration(strGen)
      Next

End Sub



Function NextGeneration (strGen)
     'define 3 variables for each character and define a new string for next generation
    Dim strCharacter, strLeftCharacter, strRightCharacter, strNextGen, arrTokens


     strNextGen = ""
     'tokenize the strGen
    arrTokens = rhino.strtok(strGen, ",")
     Dim i
     For i=0 To Ubound(arrTokens)
         strCharacter      = arrTokens(i)
         
         If i=0 Then
             strLeftCharacter  = arrTokens(Ubound(arrTokens))
         Else
             strLeftCharacter  = arrTokens(i-1)
         End If

         If i=Ubound(arrTokens) Then
             strRightCharacter  = arrTokens(0)
         Else
             strRightCharacter  = arrTokens(i+1)
         End If

         'loop through each of the arrTokens
        'go through the wolfram rules
        'if rule applies change the character
        if strLeftCharacter = 1 AND strCharacter = 1 AND strRightCharacter = 1  Then
               strNextGen = strNextGen & ",0"
         End If

         if strLeftCharacter = 1 AND strCharacter = 1 AND strRightCharacter = 0  Then
               strNextGen = strNextGen & ",0"
         End If

         if strLeftCharacter = 1 AND strCharacter = 0 AND strRightCharacter = 1  Then
               strNextGen = strNextGen & ",0"
         End If
         
         if strLeftCharacter = 1 AND strCharacter = 0 AND strRightCharacter = 0  Then
               strNextGen = strNextGen & ",1"
         End If
         
         if strLeftCharacter = 0 AND strCharacter = 1 AND strRightCharacter = 1  Then
               strNextGen = strNextGen & ",1"
         End If
         
         if strLeftCharacter = 0 AND strCharacter = 1 AND strRightCharacter = 0  Then
               strNextGen = strNextGen & ",1"
         End If
         
         if strLeftCharacter = 0 AND strCharacter = 0 AND strRightCharacter = 1  Then
               strNextGen = strNextGen & ",1"
         End If
         
         if strLeftCharacter = 0 AND strCharacter = 0 AND strRightCharacter = 0  Then
               strNextGen = strNextGen & ",0"
         End If

     
     Next

     'return the new created sting
    NextGeneration = strNextGen
End Function
作者: skywoolf    时间: 2009-12-25 22:49
网上的脚本交流很少啊,支持楼主的分享精神!
作者: sgrylicheng    时间: 2009-12-25 23:25
1# panhao1
哟,谢谢浩哥~哈哈
作者: yanhui314    时间: 2009-12-26 11:23
恩,貌似这个专业多了
作者: washburnlyon    时间: 2010-1-2 19:36
{:3_50:}太专业拉
作者: lonezhang822    时间: 2010-1-11 19:07
刚搞清楚元胞的概念....
作者: iceking    时间: 2010-1-11 19:19
能给张图看看吗?
作者: panhao1    时间: 2010-1-12 23:38
7# iceking
网上的脚本 类似于树的生成
我只关心算法和运用
作者: 990628    时间: 2010-1-18 11:20
我怎么看的晕晕的
作者: yl0110    时间: 2010-1-28 22:34
顶学弟,以后再来详读~~~
作者: 552zxp64    时间: 2010-3-8 22:18
顶了!慢慢学习!
作者: liyongguocom    时间: 2010-3-25 11:26
非常感谢楼主的分享,马上收藏!
作者: df13    时间: 2010-3-27 00:04
太神了 想不到rs一樣可以做
作者: huhu    时间: 2010-5-6 13:33
感谢感谢~~分享万岁~~
作者: sfwwdf    时间: 2010-11-17 19:32
谢谢,虽然现在还看不懂
作者: awdsxd1231    时间: 2010-11-29 13:23
看帖回帖看帖回帖看帖回帖
作者: huangchang0528    时间: 2010-12-11 14:12
楼主辛苦了~~~
作者: wenzi1988    时间: 2010-12-11 19:53
为啥在犀牛里面没动静呢····
作者: 黑色权贵    时间: 2010-12-20 23:22
谢谢~~~~~~~~~~~~~~~~~~~~
作者: ou312382395    时间: 2011-3-1 17:16
18# wenzi1988

加载后需要输入点的数值才能运行,命令行有提示的
作者: sunjiaxi0525    时间: 2011-3-6 20:24
好,谢谢楼主。。。。。
作者: langdezhuren    时间: 2011-3-14 23:14
看帖回帖看帖回帖看帖回帖
作者: 月光轨迹    时间: 2011-3-16 21:00
不懂得怎么用脚本...求指导
作者: xerrolol    时间: 2011-4-17 09:28
虽然得到的结果是2D的,但这个脚本是1D的CA..
作者: caizheli    时间: 2011-4-18 14:13
这个有意思,找了好久了
作者: lyyftxn    时间: 2011-4-18 21:09
很好  看看
作者: lyyftxn    时间: 2011-4-18 21:12
{:3_53:} {:3_56:}
作者: wawa    时间: 2011-4-28 12:28
very good!
作者: bxsqrym    时间: 2011-7-11 17:17
不错不错!!
作者: ghyjzds    时间: 2011-9-29 16:20
的确,感谢分享精神
作者: rainfish    时间: 2011-10-9 16:11
看不懂啊,得学习了
作者: jason    时间: 2011-10-9 16:52
好帖子啊,太棒了
作者: hying    时间: 2011-12-10 14:08
顶。。。!
作者: s.k.    时间: 2011-12-11 09:23
潘大师神了
作者: screenaKZ    时间: 2011-12-11 10:51
不错的分享~谢谢楼主
作者: Justonetoo    时间: 2011-12-15 09:32
表示不知所云。。。
作者: howldyx    时间: 2011-12-15 09:35
多谢分享~~~~~~~~~~
作者: hj31415926    时间: 2012-3-25 21:18
学习学习~~~~
作者: lorenzo13    时间: 2012-3-27 02:33
太牛逼了!~
作者: yinlu1320lu1320    时间: 2012-3-27 12:09
不错的帖子!!
作者: wzlacff    时间: 2012-5-24 21:50
看不懂啊……
作者: 彩虹    时间: 2012-9-29 14:19
{:07:}谢谢楼主啦




欢迎光临 NCF参数化建筑论坛 (http://ncf-china.com/) Powered by Discuz! X3.2