Ускорение рисунка turtle
Я делаю фрактал Леви на Python с помощью turtle. У меня получается но рисуется очень медленно. Мне надо завтра сдать эту работу но не хочется, чтобы учитель долго стоял и смотрел как она рисуется.
Вот код:
import turtle
def draw(n):
if n == 0:
turtle.forward(10)
else:
turtle.left(45)
draw(n - 1)
turtle.right(45)
turtle.right(45)
draw(n - 1)
turtle.left(45)
draw(20)
Ответы (3 шт):
Чтобы ускорить черепашку, используйте команду turtle.speed (n), n– скорость черепашки. n должно быть целым числом больше или равным нулю.
Ноль – самая большая скорость, доступная для использования.
То есть, вот ваша программа:
import turtle
def draw(n):
if n == 0:
turtle.forward(10)
else:
turtle.left(45)
draw(n - 1)
turtle.right(45)
turtle.right(45)
draw(n - 1)
turtle.left(45)
turtle.speed(0)
draw(20)
Быстрее нельзя, это и так самая быстрая черепашка
начало ответа взято отсюда
В таких случаях я вызываю в начале кода функцию tracer() из модуля turtle, а когда нужно отрисовать, вызываю функцию update() из того же модуля. В примере отрисовка производится всего 100 раз на более чем 200тыс движений
turtle.tracer(0)
t = turtle.Turtle()
for i in range(1000):
t.goto(0, 0)
t.lt(1.001)
for j in range(100):
t.fd(i)
t.color('white') if i % 2 else t.color('black')
t.lt(173)
if not i % 10:
turtle.update()
Самый быстрый способ рисовать – вызвать turtle.tracer(n=0, delay=0) перед началом рисования.
Первый параметр turtle.tracer задаёт интервал между обновлениями экрана. По-умолчанию экран обновляется после каждого движения черепашки, если задать 10, то обновления будут через десять движений, то есть в десять раз реже. 0 – специальное значение, оно выключает обновления вообще. Этого нет в документации, но есть в исходном коде.
Второй параметр задаёт паузу между обновлениями. Чем пауза меньше, тем быстрее работает программа.
Хотя всё работает быстро, но я ничего не вижу. Программа запущена из командной строки. Во время рисования ничего не рисуется ради скорости. Когда всё нарисовалось, программа завершается и закрывает окно. Чтобы этого не было, я вызываю turtle.done, который не даёт программе завершиться. Если вы запускаете код в другом окружении, этот вызов вам может не понадобиться.
...
turtle.tracer(n=0, delay=0)
draw(20)
turtle.done()
На моём железе этот скрипт покажет окончательный результат примерно через сто секунд. Ждать в неизвестности скучно, поэтому разрешим черепашке обновлять изображение, но не часто.
...
turtle.tracer(n=10000, delay=0)
draw(20)
turtle.done()