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

+0

Более или менее ... вопрос в том, как выделить дополнительные строки кода и как разделить эти углы, то – MirelK

ответ

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