python 3 中使用 turtle 的分形树右侧缺失

Right side of Fractal Tree Missing using turtle in python 3

我尝试使用 turtle 模块在 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)

然而,这导致分形树的右侧部分缺失,与树左侧的一半相同。

这是一张图片: Result of Code

这是我将角度乘以 0.1 的另一张图片

以下是我对代码所做的更改:

完成左侧分支后,您需要将乌龟向右旋转 2 * angle。将它旋转 angle 只会使其回到原来的方向。

要得到你想要的树,你需要在你做分支之前保存海龟的标题,这样你就可以在你做分支之后恢复它。最简单的方法是使用 .heading.setheading 方法。

我还做了另一个小改动。我使用 .position 方法获取海龟在元组中的当前位置,而不是进行两次单独的调用。

顺便说一句,使用 len 作为变量名不是一个好主意,因为它会遮盖 built-in 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()