文法构图算法是仿照语言学中的语法生成方法来构造图形的一种算法。
任何语言都是由一个字母集和一些构成有意义语句的文法规则组成的。
著名语言学家N.Chomsky在20世纪50年代给出了递归生成语法的方法,指定一个或几个初始字母和一组“生成规则”,将生成规则反复作用到初始字母和新生成的字母上,产生出整个语言。比如:
字母表:A, B
生成规则:A->AB
初始字母:A
那么会有以下的生成过程:A->AB->AAB->AAAB->AAAAB->……
L-System(LS)是形式语言的一个重要分支,被引入到算机图形学领域之后,LS成为文法构图算法中的一种。它的核心概念是重写,LS文法用字母表和符号串来表达生成对象的初始形式,然后根据一组产生式重写规则,将初始形式的每个字符依次替换为新的字符形式,以此过程反复替换重写,最后生成图形。
在二维平面上,LS文法的绘图过程,可以看成是一支笔在程序的控制下行动,每一次“行动”可以分为几种情况:
F :前进并画线
f :前进但不画线
+ :逆时针旋转delta角度
- :顺时针旋转delta角度
[ :将当前的方向和位置信息压栈
] :从栈中弹出上一次压入的方向和位置信息
以Koch曲线为例:
如图所示,这是一个Koch曲线的基本结构,其中的每一条线段都将被一个更小一些的Koch结构代替,这样一层一层地迭代下去,无穷无尽。Koch可以按照如下的LS文法来生成:
omega(初始形式) = F
delta(转角单位) = 60 (度)
P(替代规则) :F ->F-F++F-F
替代步骤:
第0次:F
第1次:F-F++F-F
第2次:F-F++F-F - F-F++F-F ++ F-F++F-F - F-F++F-F
……