Почему Repl.it python turtle.tracer (n) ограничен 150? - PullRequest
0 голосов
/ 12 апреля 2020

Я делаю рекурсивный рисунок дерева, используя repl.it py turtle. Это мой код

import turtle
import random
def about(x): return x * random.uniform(0.95,1.05)

# recursively draw a tree
def tree(t,a,s):
    if s<2: return
    t.left(a)
    t.fd(s)
    tree(t.clone(),about(30), s * about(.7))
    tree(t,about(-30), s * about(.7))

t = turtle.getpen()
t.ht(); t.speed(0); t.tracer(0)
tree(t,90,40)
t.update()

Также здесь . Но это только др aws часть дерева. Если я изменю его на

t.tracer(150)

, то это сработает! Также tracer(10) работает, но tracer(200) не работает. Есть ли предел того, как высоко трассировщик может go?

1 Ответ

1 голос
/ 28 апреля 2020

Сначала давайте обсудим ваш код для рисования. Ваше дерево состоит из около 500 линий, нарисованных 500 различными черепахами! Это кажется чрезмерным, поэтому давайте перепишем ваш код, чтобы использовать одну черепаху, которая отменяет свои движения, а не клонировать саму себя:

from turtle import Screen, Turtle
from random import uniform

def about(x):
    return x * uniform(0.95, 1.05)

# recursively draw a tree
def tree(t, a, s):
    if s < 2:
        return

    t.forward(s)
    t.left(a)
    tree(t, about(30), s * about(0.7))
    t.right(2 * a)
    tree(t, about(-30), s * about(0.7))
    t.left(a)
    t.backward(s)

screen = Screen()
screen.tracer(0)

turtle = Turtle()
turtle.hideturtle()
turtle.setheading(90)

tree(turtle, 15, 50)

screen.tracer(1)
screen.mainloop()

Что касается tracer(), я не смог воспроизвести ваши результаты, но изображение никогда не завершено либо. Аргумент tracer() указывает, что вы хотите обновлять изображение только при каждой операции nth graphi c. Это очень специализированный метод, и я рекомендую только значения 0 и 1. Во-первых, сложно рассчитать, каким должно быть каждое n-е обновление, основываясь на алгоритме и что имеет смысл визуально для пользователя. Во-вторых, в стандартной Python черепахе есть некоторые операции, которые вызывают обновление независимо от настройки tracer(), которая отбрасывает этот расчет, если только вы не знаете, когда происходят эти дополнительные обновления.

В вашем случае, для скорости целей, установите tracer(0), когда начинается интенсивное рисование, и установите tracer(1), когда вы закончите рисование. Тогда все должно работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...