2015-04-01 106 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