Python绘图指南:分形与数据可视化(全彩)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 算法

我们可以用一个列表gene来指定生成元,例如科赫曲线的生成元可以用列表gene=[0,60,-120,60,'END']来表示,如图2-10所示。

图2-10 用列表指定生成元

列表中的数值表示旋转角的大小,正数表示逆时针旋转,负数表示顺时针旋转。A点不旋转,为0;C点逆时针旋转60°,值为60;D点顺时针旋转120°,值为-120;E 点逆时针旋转60°,值为60;END 表示该生成元结束,程序读到这个值后,不会再继续读取数据。线段ACCDDEEB的长度是相同的,都为AB的1/3。

除生成元外,我们还需要一个缩小率ratio,指的是下一次迭代的线段和原始线段的比率,也就是AC/AB。在科赫曲线中这个比率是1/3,约为0.3333。

生成元1的生成元可用列表[-15,90,-150,90,'END']来表示,如图2-11所示。

图2-11 生成元1

列表中的数值表示旋转角的大小,正数表示逆时针旋转,负数表示顺时针旋转。A点顺时针旋转15°,值为-15;C点逆时针旋转90°,值为90;D点顺时针旋转150°,值为-150;E点逆时针旋转90°,值为90;END表示终止指定生成元。线段ACCDDEEB的长度是相同的。

生成元1的缩小率ratio(下一次迭代的线段和原始线段的比率),也就是AC/AB,计算可得:

生成元2的生成元可用列表[0,90,-90,-90,90,-90,90,90,-90,'END']来表示,如图2-12所示。

图2-12 生成元2

列表中的数值表示旋转角的大小,正数表示逆时针旋转,负数表示顺时针旋转。生成元2 的缩小率为:

ratio=1/5=0.2

几种曲线的生成元和缩小率如表2-1所示。

表2-1 几种曲线的生成元和缩小率