Определение относительной функции перехода - черепаха питона - PullRequest
0 голосов
/ 02 апреля 2019

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

Мои текущие проекты используют функцию goto(x,y), однако, очевидно, что при вызове их в разных местах код проекта все еще вызывается в исходном местоположении. Есть ли способ сделать функцию позиционирования относительной к квадрату или другие обходные пути? Я понимаю основы черепахи, но я все еще начинающий. Приветствия

edit: небольшой пример кода (работает для квадрата, нарисованного в 0,0, однако, когда квадрат помещается в разные x, координаты y не соответствуют тексту)

pencolor('black')
goto(5, 5)
write('MITSUBISHI', font=('Verdana', '22', 'bold'))
penup()

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Если черепаха находится в векторе положения (x, y), и вы хотите переместить ее, скажем, на 3 вправо и на 5 вверх, вы просто добавляете это к координатам, поэтому черепаха должна переместиться на (x + 3, y + 5). К счастью, turtle.Vec2D поддерживает такое добавление, и вы можете использовать goto для вектора. Вы можете получить текущую позицию с помощью turtle.pos()

import turtle

def goto_relative(dx, dy=None):
    """Moves the automatic global turtle by dx and dy (Or a given vector)"""
    goto_relative_on_turtle(turtle, dx, dy)

def goto_relative_on_turtle(t, dx, dy=None):
    """Moves al turtle by dx and dy (Or a given vector)"""
    if dy is None:
        dx, dy = dx
    t.goto(t.pos() + turtle.Vec2D(dx, dy))
0 голосов
/ 02 апреля 2019

В дополнение к отличному ответу @ Artyer (+1), не забывайте о forward(), backward(), left(), right(), которые являются относительными позиционными операциями, в отличие от абсолютные операции goto() и setheading(). Использование соответствующих относительных операций может потребовать переосмысления вашей графики.

В крайнем случае, вы всегда можете сделать что-то ужасное, например:

t.setx(t.xcor() + 10)
...