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()
我尝试使用 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()