我尝试使用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的图片
这是我对代码所做的更改:
答案 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()