陆续有网友问及 Rabbit 插件的教学,推荐一篇台湾 June-Hao Hou 老师发表在 Blogspot上的一篇简介文章,由于大陆地区无法访问,所以转载过来供大家参考。
原文名称:兔子與 L-System
原文网址:http://prototypingideas.blogspot.jp/2012/12/l-system.html
![rabbit_front.jpg rabbit_front.jpg](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095722vuf34a99974u8gkl.jpg)
Grasshopper 的 Rabbit 是专门处理细胞自动机(Cellular Automata; CA)和 L-System (Lindenmayer System)的套件。本文将介绍 Rabbit 跑 L-System 的例子。测试环境:Rhino 4 SR9 + Grasshopper 0.9.0014 + Rabbit 0.3.1
本文不意图对 L-System 做详细解说,如果对 L-System 观念不熟,建议请先参阅 Wikipedia 的介绍 (中文介绍请点击这里) 。此外,也务必阅读、收藏经典著作 The Algorithmic Beauty of Plants,作者之一就是 Lindenmayer!
回到 Rabbit 套件,当中处理 L-System 的有三个元件,这里介绍常用的两个:
LSystem
![Rabbit01.png Rabbit01.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095722nn1qf0wasnp4v0z4.png)
此元件根据初始状态(A)和规则(PR)产生 L-System 符号字符串。
输入参数有:
![Rabbit01.png Rabbit01.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095722nn1qf0wasnp4v0z4.png)
此元件根据初始状态(A)和规则(PR)产生 L-System 符号字符串。
输入参数有:
· A (Axiom): 定义初始状态。
· PR (Production Rules): 定义规则。
· n (Number of Generations): 迭代次数。
输出值为:
· W (Word): 生成的最终符号字符串(一般只需用这个回传值)。
· LW (List of Words): 所有迭代过程所产生的字符串。
· LS (LSystem Object): 回传完整的 LSystem 物件。
· S (Source String): 规则字符串。
· L (Step Length): 步伐长度。
· dL (Step Length Scale): 步伐长度缩放比例。
· A (Angle): 角度。
· dA (Angle Scale): 角度缩放比例。(尚未作用)
· O (Initial Position and Orientation): 初始位置与方位。
· TS (Tube Settings): 管状形体设定。
输出值为:
· E (Edges): 依据规则生成的线条。
· V (Vertices): 依据规则生成的点(透过符号J)。
· T (Tube geometry): 管状形体。
· P (Turtle Orientation Planes): 乌龟的工作面。
· S (Section profiles): 剖面线。
而在 Rabbit 里可用的 Axiom 和 Production Rules 规则符号包括:
· F 往前一步 L(步伐长度) 同时画线
· f 往前一步 L(步伐长度) 但不画线
· + 左转 A(预设角度) 度
· – 右转 A(预设角度) 度
· \ 左倾 A(预设角度) 度
· / 右倾 A(预设角度) 度
· ^ 上仰 A(预设角度) 度
· & 下俯 A(预设角度) 度
· | 回转 180 度
· J 插入一个点(Vertex)
· “ 目前长度乘上 dL(长度缩放)
· ! 目前粗细乘上 dT(粗细缩放)
· [ 开始分支(储存乌龟方位)
· ] 结束分支(恢复乌龟方位)
· A/B/C/D.. 符号运算用的变量
· f 往前一步 L(步伐长度) 但不画线
· + 左转 A(预设角度) 度
· – 右转 A(预设角度) 度
· \ 左倾 A(预设角度) 度
· / 右倾 A(预设角度) 度
· ^ 上仰 A(预设角度) 度
· & 下俯 A(预设角度) 度
· | 回转 180 度
· J 插入一个点(Vertex)
· “ 目前长度乘上 dL(长度缩放)
· ! 目前粗细乘上 dT(粗细缩放)
· [ 开始分支(储存乌龟方位)
· ] 结束分支(恢复乌龟方位)
· A/B/C/D.. 符号运算用的变量
其中左转(turn left)、右转(turn right)、左倾(roll left)、右倾(roll right)、上仰(pitch up)、下俯(pitch down)分别对应到三轴的旋转,故可生成三维的 L-System。要留意这些旋转都是相对的,四次右转90度会回到原来位置。此外,Turtle 元件虽然有 dA参数,文件中却没有提到相对应的规则符号,经与作者联系后得知目前版本尚未实作 dA,预计下一版会提供。Rabbit 所附的范例清楚展示了各种不同的可能性,包括生成规则(PR)和长度、角度、工作面的变化:
![Parallels DesktopScreenSnapz003.png Parallels DesktopScreenSnapz003.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095720hcyn6opd6bb9nne2.png)
![Parallels DesktopScreenSnapz004.png Parallels DesktopScreenSnapz004.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095721goe5ouu5ee5e9q54.png)
![Parallels DesktopScreenSnapz005.png Parallels DesktopScreenSnapz005.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/0957211zcefh4gyjccj3eh.png)
一般 L-System 初学者会对 X, Y, A, B 之类的变量都会感到困惑,不知何时该用、以及怎么用。变量只有在生成符号字符串时有作用,在绘图上则没有实质作用。
若不使用变量, L-System 的变化比较有限,只有 F 可供置换,所产生的图形也相对较为规则,如:
Axiom: F
Rule: F = F[-F]F
![Parallels DesktopScreenSnapz006.png Parallels DesktopScreenSnapz006.png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095722qdde4e4c4hefxzfn.png)
使用变量后,则可定义更复杂的置换规则:
Axiom: F
Rules: F = F[-XF]F, X = F[X]
Axiom: F
Rules: F = F[-XF]F, X = F[X]
![Parallels DesktopScreenSnapz005 (1).png Parallels DesktopScreenSnapz005 (1).png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095721e6653q1s61qsbd9q.png)
甚至分支型态的多样化:
Axiom: F
Rules: F = F[-XF]YF, X = F[X], Y = [+FY]
Axiom: F
Rules: F = F[-XF]YF, X = F[X], Y = [+FY]
![Parallels DesktopScreenSnapz004 (1).png Parallels DesktopScreenSnapz004 (1).png](http://bbs.rhino3d.asia/data/attachment/forum/201410/06/095720h0huh7ubkhlqzspr.png)
上述三个例子的程序在此下载
L-system-Rabbit.gh (11.16 KB, 下载次数: 2) :。
![](http://bbs.rhino3d.asia/static/image/filetype/unknown.gif)
任何疑问,烦请点击这里论坛发帖讨论。