NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 69115|回复: 41
打印 上一主题 下一主题

[网络资源] 元胞自动机脚本

[复制链接]
跳转到指定楼层
1m
发表于 2009-12-25 13:32:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
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

评分

参与人数 1强度 +3 照度 +50 收起 理由
skywoolf + 3 + 50 精品资源

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享分享
42m
发表于 2012-9-29 14:19:58 | 只看该作者
{:07:}谢谢楼主啦
41m
发表于 2012-5-24 21:50:09 | 只看该作者
看不懂啊……
40m
发表于 2012-3-27 12:09:53 | 只看该作者
不错的帖子!!
39m
发表于 2012-3-27 02:33:33 | 只看该作者
太牛逼了!~
38m
发表于 2012-3-25 21:18:02 | 只看该作者
学习学习~~~~
37m
发表于 2011-12-15 09:35:53 | 只看该作者
多谢分享~~~~~~~~~~
36m
发表于 2011-12-15 09:32:18 | 只看该作者
表示不知所云。。。
35m
发表于 2011-12-11 10:51:49 | 只看该作者
不错的分享~谢谢楼主
34m
发表于 2011-12-11 09:23:22 | 只看该作者
潘大师神了
33m
发表于 2011-12-10 14:08:23 | 只看该作者
顶。。。!
32m
发表于 2011-10-9 16:52:18 | 只看该作者
好帖子啊,太棒了
31m
发表于 2011-10-9 16:11:55 | 只看该作者
看不懂啊,得学习了
30m
发表于 2011-9-29 16:20:11 | 只看该作者
的确,感谢分享精神
29m
发表于 2011-7-11 17:17:45 | 只看该作者
不错不错!!
28m
发表于 2011-4-28 12:28:26 | 只看该作者
very good!
27m
发表于 2011-4-18 21:12:52 | 只看该作者
{:3_53:} {:3_56:}
26m
发表于 2011-4-18 21:09:04 | 只看该作者
很好  看看
25m
发表于 2011-4-18 14:13:55 | 只看该作者
这个有意思,找了好久了
24m
发表于 2011-4-17 09:28:01 | 只看该作者
虽然得到的结果是2D的,但这个脚本是1D的CA..

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-22 12:51 , Processed in 0.066150 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表