Правая сторона Fractal Tree Отсутствует с использованием черепахи в питоне 3 - PullRequest
0 голосов
/ 11 октября 2018

Я попытался создать фрактальное дерево в python, используя модуль turtle.Это то, что у меня есть до сих пор:

    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

Result of Code

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

Code

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

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

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

...