system算法介绍
一、基础基础原理
1.算法介绍
Lindenmayer system简称 L-system是由荷兰乌特勒支大学的生物学和植物学家,匈牙利裔的 Aristid Lindenmayer于1968 年提出的有关生长发展中的细胞交互作用的数学模型,被广泛应用于植物生长过程的研究和建模,也常用于模拟各种生物体的形态。L-system是一系列不同形式的正规语法规则,多被用于植物生长过程 建模 ,但是也被用于模拟各种 生物体的形态。 L-system也能用于生成自相似的分形,例如迭代函数系统。L-system是一系列不同形式的正规语法规则,多被用于植物生长过程 建模 ,但是也被用于模拟各种 生物体的形态。 L-system也能用于生成自相似的分形,例如迭代函数系统。
- 算法原理
Lsystem的核心可以理解为根据已有的规则重写原有字符串,迭代一定次数,生成符合预期的新字符串。L系统是由规则公理和规则组成,对公理依据规则进行有限次数的迭代。
L-system一般定义形式定义为:
V : 符号变量集合(Set of symbolic variables)
S :常量符号集合(Set of symbolic constants)
ω :初始状态串(axiom)
P : 生成规则(set of production)
例如,Lindenmayer 研究海藻生长模式时提出的最早的 L-system:
变量V :A B
常量S : 无
公理ω :A
规则P :(A→AB),(B→A)
迭代过程如下:
用树状分支表示该过程更明晰:
由该树状分支图可以看出,每次迭代开始,依次从字符串的第一个字符开始根据规则向后迭代,直到所有字符串都参与生成。
下面来看几个生成线条的例子,对线条迭代的过程通常用海龟模型进行描述,通过海龟的行进来拆解生成过程,接下来定义一个生成Koch snowflake(科赫曲线)的规则:
V : F(前进一步)
S : +(向左转60o),-(向右转60o)
ω :F
P :(F→F+F--F+F)
当n=0时,字符串为F,海龟向前走一步。
当n=1时,字符串为F+F--F+F
①海龟向前走一步;②方向绕逆时针旋转60°前进一步;③方向绕顺时针旋转60°,旋转两次,前进一步;④方向绕逆时针旋转60°,前进一步;四次前进分别对应四条直线,最终效果如下图:
当n=2时,字符串为F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F
海龟按照规则一步一步前进①海龟向前走一步;②方向绕逆时针旋转60°前进一步;③方向绕顺时针旋转60°,旋转两次,前进一步;④方向绕逆时针旋转60°;⑤方向逆时针旋转60°,前进一步;略…;每一次前进对应一条直线,如下图示:
当n=3时,字符串为F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F+F+F--F+F+F+F--F+F--F+F--F+F+F+F--F+F
海龟按照规则前进,如下图:
当n=4时,如下图所示:
当n=5时,如下图所示: