Я попытался сделать фрактальное дерево в python, используя модуль черепахи. Это то, что у меня есть до сих пор:
import turtle
t1 = turtle.Turtle()
t1.speed(0)
t1.left(90)
t1.hideturtle()
def branch(len):
t1.forward(len)
if(len>20):
angle = 45
xCor = t1.xcor()
yCor = t1.ycor()
t1.left(angle)
branch(len*0.67)
t1.goto(xCor, yCor)
xCor = t1.xcor()
yCor = t1.ycor()
t1.left(-angle)
branch(len*0.67)
t1.goto(xCor, yCor)
branch(100)
Однако это приводит к тому, что правая часть фрактального дерева отсутствует, а также половина левой части дерева.
Вот изображение: Результат кода
Вот другая картина, где я умножаю угол на 0,1
Вот изменения, внесенные в мой код:
Чтобы получить нужное дерево, вам нужно сохранить заголовок черепахи, прежде чем делать ветку, чтобы вы могли восстановить ее после того, как вы сделаете ветку. Легкий способ сделать это - использовать методы .heading
и .setheading
.
Я также сделал еще одно незначительное изменение. Я использую метод .position
чтобы получить текущую позицию черепахи в кортеже, вместо того, чтобы делать два отдельных вызова.
Кстати, не рекомендуется использовать len
в качестве имени переменной, потому что это затеняет встроенную функцию len
.
import turtle
t1 = turtle.Turtle()
t1.speed(0)
t1.left(90)
t1.hideturtle()
# Move the turtle down the screen to make room for the tree
t1.up()
t1.forward(-200)
t1.down()
angle = 45
def branch(length):
t1.forward(length)
if length > 20:
xy = t1.position()
head = t1.heading()
length *= 0.67
t1.left(angle)
branch(length)
t1.setheading(head)
t1.goto(xy)
t1.right(angle)
branch(length)
t1.goto(xy)
branch(100)
turtle.done()
Вы должны повернуть черепаху вправо на 2 * angle
когда вы закончите с левой ветвью. Вращение его по angle
приведет только к первоначальному направлению.