NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 69183|回复: 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 分享分享
2m
发表于 2009-12-25 22:49:39 | 只看该作者
网上的脚本交流很少啊,支持楼主的分享精神!
3m
发表于 2009-12-25 23:25:14 | 只看该作者
1# panhao1
哟,谢谢浩哥~哈哈
4m
发表于 2009-12-26 11:23:25 | 只看该作者
恩,貌似这个专业多了
5m
发表于 2010-1-2 19:36:12 | 只看该作者
{:3_50:}太专业拉
6m
发表于 2010-1-11 19:07:14 | 只看该作者
刚搞清楚元胞的概念....
7m
发表于 2010-1-11 19:19:23 | 只看该作者
能给张图看看吗?
8m
 楼主| 发表于 2010-1-12 23:38:32 | 只看该作者
7# iceking
网上的脚本 类似于树的生成
我只关心算法和运用
9m
发表于 2010-1-18 11:20:49 | 只看该作者
我怎么看的晕晕的
10m
发表于 2010-1-28 22:34:04 | 只看该作者
顶学弟,以后再来详读~~~
11m
发表于 2010-3-8 22:18:02 | 只看该作者
顶了!慢慢学习!
12m
发表于 2010-3-25 11:26:54 | 只看该作者
非常感谢楼主的分享,马上收藏!
13m
发表于 2010-3-27 00:04:48 | 只看该作者
太神了 想不到rs一樣可以做
14m
发表于 2010-5-6 13:33:54 | 只看该作者
感谢感谢~~分享万岁~~
15m
发表于 2010-11-17 19:32:18 | 只看该作者
谢谢,虽然现在还看不懂
16m
发表于 2010-11-29 13:23:23 | 只看该作者
看帖回帖看帖回帖看帖回帖
17m
发表于 2010-12-11 14:12:00 | 只看该作者
楼主辛苦了~~~
18m
发表于 2010-12-11 19:53:46 | 只看该作者
为啥在犀牛里面没动静呢····
19m
发表于 2010-12-20 23:22:41 | 只看该作者
谢谢~~~~~~~~~~~~~~~~~~~~
20m
发表于 2011-3-1 17:16:55 | 只看该作者
18# wenzi1988

加载后需要输入点的数值才能运行,命令行有提示的

评分

参与人数 1照度 +1 收起 理由
彩虹 + 1 感谢分享!

查看全部评分

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

GMT+8, 2024-11-27 13:20 , Processed in 0.070230 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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