L-System(Lindenmayer system)是一种生成分形图案的方法。与迭代函数系统生成分形依靠数字的迭代不同,L-System依赖的是字符的迭代。字符间也有迭代公式,可以将字符换成某个字符串,随着迭代次数的增加,字符串长度越来越大,而字符串中的每一个字符,都代表着一种对线条的操作,如延伸、旋转等。最后将字符串依次执行一遍,便会得到一张分形图案。
字符的含义:
F/f:向前走固定长度
+:正方向旋转固定角度
-:负方向旋转固定角度
[:将当前的位置存入堆栈
]:从堆栈中取出坐标,修改当前位置
S:出世迭代符号
比如,F+F--F+F这个字符串的结果是
图1
如果迭代规则是 F = F+F--F+F,第一次迭代的结果是
图2
图2的生成过程:相当于当向前走的时候(执行F的时候),不是向前画一条线段,而是向前画一个图1。
我们可以用一个字典来定义一个规则中的所有属性,比如迭代公式、初始符号、初始角度、角度增量等。
生成 6 个分形图案的代码如下,有详细的注释:
# L-System(Lindenmayer system)是一种用字符串替代产生分形图形的算法
from math import sin, cos, pi
from matplotlib import pyplot as pl
from matplotlib import collections
class L_System(object):