2015-04-01 53 views
3

我想绘制一个Python中的分形树,它有3个分支。我知道如何绘制一棵树有两个分支,但有三个分支......不知道 试图找到例子,但不能。只发现了两个分支树的例子。 有没有人有任何想法如何做到这一点?在Python中绘制分形树

对于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() 
+0

您是否了解在现有代码中选择的角度?你认为树枝在3分枝树上应该在什么角度? – Useless 2015-04-01 13:59:15

+0

或多或少...问题是如何分配额外的代码行以及如何划分这些角度 – MirelK 2015-04-01 14:05:11

回答

4

下面是一个扩展的例子。使用你的方法来制作分支,很容易让它们重叠,所以我添加了一些参数来帮助完成分支。随意使用代码,但这是一个任意级别递归的例子。

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() 
+0

非常感谢!这非常有帮助!我能够完成我的代码,它现在可以工作! :) – MirelK 2015-04-01 17:36:39