在 Python 中绘制分形树
Drawing a fractal tree in Python
我正在尝试在 Python 中绘制一棵分形树,它有 3 个分支。我知道如何画一棵有 2 个树枝的树,但有 3 个树枝……不确定
试图找到例子,但找不到。只找到有两个树枝的树的例子。
有人知道怎么做吗?
对于 2 个分支树,我使用了以下代码:
import turtle
def tree(f_lenght, min_lenght=10):
"""
Draws a tree with 2 branches using recursion
"""
turtle.forward(f_lenght)
if f_lenght > min_lenght:
turtle.left(45)
tree(0.6*f_lenght, min_lenght)
turtle.right(90)
tree(0.6*f_lenght, min_lenght)
turtle.left(45)
turtle.back(f_lenght)
turtle.left(90)
tree(100)
turtle.exitonclick()
这是一个扩展示例。使用您的方法制作分支,很容易让它们重叠,所以我添加了一些参数来帮助实现这一点。随意使用代码,但这是任意递归级别的示例。
import turtle
def tree(f_length, spray=90., branches=2, f_scale=0.5, f_scale_friction=1.4, min_length=10):
"""
Draws a tree with 2 branches using recursion
"""
step = float(spray / (branches - 1))
f_scale /= f_scale_friction
turtle.forward(f_length)
if f_length > min_length:
turtle.left(spray / 2)
tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length)
for counter in range(branches - 1):
turtle.right(step)
tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length)
turtle.left(spray / 2)
turtle.back(f_length)
turtle.left(90)
tree(80, spray=120, branches=4)
turtle.exitonclick()
我正在尝试在 Python 中绘制一棵分形树,它有 3 个分支。我知道如何画一棵有 2 个树枝的树,但有 3 个树枝……不确定 试图找到例子,但找不到。只找到有两个树枝的树的例子。 有人知道怎么做吗?
对于 2 个分支树,我使用了以下代码:
import turtle
def tree(f_lenght, min_lenght=10):
"""
Draws a tree with 2 branches using recursion
"""
turtle.forward(f_lenght)
if f_lenght > min_lenght:
turtle.left(45)
tree(0.6*f_lenght, min_lenght)
turtle.right(90)
tree(0.6*f_lenght, min_lenght)
turtle.left(45)
turtle.back(f_lenght)
turtle.left(90)
tree(100)
turtle.exitonclick()
这是一个扩展示例。使用您的方法制作分支,很容易让它们重叠,所以我添加了一些参数来帮助实现这一点。随意使用代码,但这是任意递归级别的示例。
import turtle
def tree(f_length, spray=90., branches=2, f_scale=0.5, f_scale_friction=1.4, min_length=10):
"""
Draws a tree with 2 branches using recursion
"""
step = float(spray / (branches - 1))
f_scale /= f_scale_friction
turtle.forward(f_length)
if f_length > min_length:
turtle.left(spray / 2)
tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length)
for counter in range(branches - 1):
turtle.right(step)
tree(f_scale * f_length, spray, branches, f_scale, f_scale_friction, min_length)
turtle.left(spray / 2)
turtle.back(f_length)
turtle.left(90)
tree(80, spray=120, branches=4)
turtle.exitonclick()