Python 代码实现随机分形树生成 (L-系统)
以下是一段基于 L-系统 生成随机分形树的 Python 代码:
import turtle
import random
# 定义 L-系统
def generate_l_system(axiom, rules, generations):
# 初始化序列
start_string = axiom
# 循环生成序列
for i in range(generations):
# 新的序列
end_string = ""
# 遍历序列中的每个字符
for char in start_string:
# 如果字符有对应的规则,替换为规则中的字符串
if char in rules:
end_string += rules[char]
else:
end_string += char
start_string = end_string
return start_string
# 绘制分形树
def draw_l_system(some_turtle, instructions, angle, distance):
# 遍历序列中的每个字符
for cmd in instructions:
# 如果是 F,向前移动一定距离
if cmd == 'F':
some_turtle.forward(distance)
# 如果是 -,向左旋转一定角度
elif cmd == '-':
some_turtle.left(angle)
# 如果是 +,向右旋转一定角度
elif cmd == '+':
some_turtle.right(angle)
# 设置初始参数
axiom = 'F'
rules = {'F': 'FF+[+F-F-F]-[-F+F+F]'}
generations = 5
angle = 25
distance = 5
# 生成 L-系统 序列
instructions = generate_l_system(axiom, rules, generations)
# 初始化海龟
t = turtle.Turtle()
t.speed(0)
t.left(90)
t.penup()
t.goto(0, -300)
t.pendown()
# 绘制分形树
for i in range(10):
t.color(random.choice(['brown', 'red', 'orange']))
t.pensize(10-i)
draw_l_system(t, instructions, angle, distance)
# 隐藏海龟
t.hideturtle()
turtle.done()
代码注释如下:
- 导入 turtle 和 random 模块
import turtle
import random
- 定义 generate_l_system 函数,用于生成 L-系统 序列
def generate_l_system(axiom, rules, generations):
# 初始化序列
start_string = axiom
# 循环生成序列
for i in range(generations):
# 新的序列
end_string = ""
# 遍历序列中的每个字符
for char in start_string:
# 如果字符有对应的规则,替换为规则中的字符串
if char in rules:
end_string += rules[char]
else:
end_string += char
start_string = end_string
return start_string
- 定义 draw_l_system 函数,用于绘制分形树
def draw_l_system(some_turtle, instructions, angle, distance):
# 遍历序列中的每个字符
for cmd in instructions:
# 如果是 F,向前移动一定距离
if cmd == 'F':
some_turtle.forward(distance)
# 如果是 -,向左旋转一定角度
elif cmd == '-':
some_turtle.left(angle)
# 如果是 +,向右旋转一定角度
elif cmd == '+':
some_turtle.right(angle)
- 设置初始参数
axiom = 'F'
rules = {'F': 'FF+[+F-F-F]-[-F+F+F]'}
generations = 5
angle = 25
distance = 5
- 生成 L-系统 序列
instructions = generate_l_system(axiom, rules, generations)
- 初始化海龟
t = turtle.Turtle()
t.speed(0)
t.left(90)
t.penup()
t.goto(0, -300)
t.pendown()
- 绘制分形树
for i in range(10):
t.color(random.choice(['brown', 'red', 'orange']))
t.pensize(10-i)
draw_l_system(t, instructions, angle, distance)
- 隐藏海龟,结束程序
t.hideturtle()
turtle.done()
原文地址: https://www.cveoy.top/t/topic/oRtV 著作权归作者所有。请勿转载和采集!