在Python 3中使用乌龟缺少分形树的右侧

时间:2018-10-11 19:49:13

标签: python turtle-graphics fractals

我尝试使用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的图片

Result of Code

这是我对代码所做的更改:

Code

2 个答案:

答案 0 :(得分:2)

完成左分支后,需要将龟向右旋转2 * angle。旋转angle只会使其回到原始方向。

答案 1 :(得分: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()