Правая сторона Fractal Tree Отсутствует с использованием черепахи в питоне 3

1

Я попытался сделать фрактальное дерево в 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

Изображение 174551

Вот изменения, внесенные в мой код:

Изображение 174551

Теги:
turtle-graphics
fractals

2 ответа

0
Лучший ответ

Чтобы получить нужное дерево, вам нужно сохранить заголовок черепахи, прежде чем делать ветку, чтобы вы могли восстановить ее после того, как вы сделаете ветку. Легкий способ сделать это - использовать методы .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

Вы должны повернуть черепаху вправо на 2 * angle когда вы закончите с левой ветвью. Вращение его по angle приведет только к первоначальному направлению.

  • 0
    теперь это только с правой стороны
  • 0
    Можете ли вы показать, какие изменения вы сделали?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню