0
点赞
收藏
分享

微信扫一扫

Lsystem算法介绍

穆熙沐 2022-03-18 阅读 155
几何学c++

system算法介绍

一、基础基础原理

1.算法介绍

Lindenmayer system简称 L-system是由荷兰乌特勒支大学的生物学和植物学家,匈牙利裔的 Aristid Lindenmayer于1968 年提出的有关生长发展中的细胞交互作用的数学模型,被广泛应用于植物生长过程的研究和建模,也常用于模拟各种生物体的形态。L-system是一系列不同形式的正规语法规则,多被用于植物生长过程 建模 ,但是也被用于模拟各种 生物体的形态。 L-system也能用于生成自相似的分形,例如迭代函数系统。L-system是一系列不同形式的正规语法规则,多被用于植物生长过程 建模 ,但是也被用于模拟各种 生物体的形态。 L-system也能用于生成自相似的分形,例如迭代函数系统。

  1. 算法原理

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(科赫曲线)的规则G={V , S ,\varpi ,P }

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时,如下图所示:

举报

相关推荐

0 条评论