Python 3.6.2 中的 tracer(False) 错误
tracer(False) bug in Python 3.6.2
我正在尝试使用 Turtle 库递归地绘制分形。我有一个函数 Koch(step, degree)
,它接受步长和度数;在函数内部,它使用 Koch(step/3, degree-1)
调用自身以递归构建 fractal-like 边。
启用动画后一切正常,但是当我尝试切换 tracer(False)
以加速更高级别的绘图时,它似乎在最后跳过了一部分动画。
这是一条 3 阶曲线,动画已打开:
这是相同的曲线,但 tracer(False)
:
无论分形的程度如何,问题仍然存在。这是 5 次曲线的输出:
我做错了什么吗?我正在尝试为动画创建一堆帧,因此我需要它们尽可能快地绘制,否则我将永远无法完成项目。
至少有几种方法可以解决这个问题。一种是在绘图结束时简单地将 tracer()
重置为其原始值。 IE。 tracer(1)
。 (正如您发现的那样,为了简化操作,您可以使用 tracer(False)
隐藏绘图并使用 tracer(True)
将其重新打开。)
另一种方法是在绘图结束时调用 update()
。要么强制执行最后的绘图步骤。
使用 python-with-science 中的科赫雪花示例模拟您的问题,因为您没有提供任何代码。不重新打开 tracer()
也不调用 update()
:
from turtle import *
def koch(distance, order):
if order > 0:
for angle in [60, -120, 60, 0]:
koch(distance / 3, order - 1)
left(angle)
else:
forward(distance)
# Choose size
size = 400
order = 3
# Ensure snowflake is centered
penup()
backward(size / 1.732)
left(30)
pendown()
# Make it fast
tracer(False)
hideturtle()
# Three Koch curves
for _ in range(3):
koch(size, order)
right(120)
mainloop()
现在稍微改变一下结局:
# Three Koch curves
for _ in range(3):
koch(size, order)
right(120)
# Make the last parts appear
update()
mainloop()
我正在尝试使用 Turtle 库递归地绘制分形。我有一个函数 Koch(step, degree)
,它接受步长和度数;在函数内部,它使用 Koch(step/3, degree-1)
调用自身以递归构建 fractal-like 边。
启用动画后一切正常,但是当我尝试切换 tracer(False)
以加速更高级别的绘图时,它似乎在最后跳过了一部分动画。
这是一条 3 阶曲线,动画已打开:
这是相同的曲线,但 tracer(False)
:
无论分形的程度如何,问题仍然存在。这是 5 次曲线的输出:
我做错了什么吗?我正在尝试为动画创建一堆帧,因此我需要它们尽可能快地绘制,否则我将永远无法完成项目。
至少有几种方法可以解决这个问题。一种是在绘图结束时简单地将 tracer()
重置为其原始值。 IE。 tracer(1)
。 (正如您发现的那样,为了简化操作,您可以使用 tracer(False)
隐藏绘图并使用 tracer(True)
将其重新打开。)
另一种方法是在绘图结束时调用 update()
。要么强制执行最后的绘图步骤。
使用 python-with-science 中的科赫雪花示例模拟您的问题,因为您没有提供任何代码。不重新打开 tracer()
也不调用 update()
:
from turtle import *
def koch(distance, order):
if order > 0:
for angle in [60, -120, 60, 0]:
koch(distance / 3, order - 1)
left(angle)
else:
forward(distance)
# Choose size
size = 400
order = 3
# Ensure snowflake is centered
penup()
backward(size / 1.732)
left(30)
pendown()
# Make it fast
tracer(False)
hideturtle()
# Three Koch curves
for _ in range(3):
koch(size, order)
right(120)
mainloop()
现在稍微改变一下结局:
# Three Koch curves
for _ in range(3):
koch(size, order)
right(120)
# Make the last parts appear
update()
mainloop()