可以看出,3B1B的fractal.py
文件确实是一份面向对象编程的绝佳教材。首先创建一个父类,然后设计一些方法,之后根据父类使用子类进行相应的迭代,来进一步的实现更多的功能。如果要使用某一种类或者方法的话,直接在实际的历程里面对其类进行实例化,然后就能调用其为自己所用了
LindenmayerCurve是一种用来生成分形曲线的方法,它是由匈牙利理论生物学家和植物学家Lindenmayer在1968年提出的²。LindenmayerCurve的基本思想是用一组符号来表示绘制曲线的指令,然后用一些规则来不断地替换这些符号,从而得到越来越复杂的字符串。最后,根据字符串中的符号,用一种类似乌龟绘图的方式来画出曲线。LindenmayerCurve可以用来模拟自然界中的一些形态,例如植物的生长、雪花的结构、龙形等¹³。
一个绘制LindenmayerCurve曲线的例子是这样的:
- 首先,我们需要定义一个字母表,包含可以被替换的变量和不可以被替换的常量。例如,我们可以用F表示向前走一步,+表示向左转90度,-表示向右转90度。
- 然后,我们需要定义一个初始状态,也就是一个由字母表中的符号组成的字符串。例如,我们可以用F表示初始状态。
- 接着,我们需要定义一些生成规则,也就是一些由前驱和后继组成的键值对。前驱是字母表中的一个变量,后继是由字母表中的符号组成的一个字符串。生成规则表示在每一次迭代中,如何将前驱替换为后继。例如,我们可以用F→F+F-F-F+F表示生成规则。
- 最后,我们需要定义一个迭代次数,也就是替换字符串的次数。例如,我们可以用3表示迭代次数。
根据这些定义,我们可以开始绘制LindenmayerCurve曲线了:
- 第0次迭代:初始状态为F。
- 第1次迭代:将F替换为F+F-F-F+F,得到新的字符串F+F-F-F+F。
- 第2次迭代:将每个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。
- 第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+F+F-F-F+F。
根据这个字符串中的符号,我们可以用乌龟绘图的方式来画出曲线。具体步骤如下:
- 将乌龟放在原点,并让它面向右方。
- 遇到一个F就让乌龟向前走一步,并在走过的路上画一条线。
- 遇到一个+就让乌龟向左转90度。
- 遇到一个-就让乌龟向右转90度。
这样就可以得到一个类似于雪花或者岛屿的分形图形了。你可以点击这个链接看到一个动态演示的效果。如果你想了解更多关于LindenmayerCurve曲线的信息和例子,你可以点击这些链接¹²³ ,或者在Bing搜索引擎中输入LindenmayerCurve进行搜索。
源: 与必应的对话, 2023/9/15 (1) Lindenmayer System -- from Wolfram MathWorld. https://mathworld.wolfram.com/LindenmayerSystem.html. (2) L-system - Wikipedia. https://en.wikipedia.org/wiki/L-system. (3) L-systems : draw nice fractals and plants (part I) - Medium. https://medium.com/@hhtun21/l-systems-draw-your-first-fractals-139ed0bfcac2.