Методы forward и backward, left и right, setheading модуля turtle языка Python
| из модуля turtle: |
|
|---|
В предыдущих уроках мы использовали команду goto, чтобы заставить черепаху нарисовать на холсте линию. В качестве аргументов мы передавали координаты места, куда она должна была перейти. И не важно, где черепаха стояла до этого: в центре холста, в левом нижнем углу, в правом верхнем. Из любого места она шла в указанное. Какой длины при этом окажется отрезок, под каким углом будет повернут, нельзя проконтролировать. То есть пройденное черепахой расстояние не важно.
С точки зрения перехода в одно и то же место, независимо от того, где черепаха находилась до этого, команду goto можно считать абсолютной.
Однако чаще требуется другое: нарисовать отрезок определенной длины, идущий в заданном направлении. Например, длинной в 100 точек, идущий вниз от текущей позиции. Чтобы легко это делать нам потребуется изучить такие команды модуля turtle языка Python как forward, backward, setheading, left и right.
Также в примерах этого урока мы превратим стрелочку в черепаху, чтобы лучше видеть, как она поворачивается (далее данная инструкция не будет упоминаться):
shape('turtle')
Итак, forward и backward заставляют черепаху идти вперед или назад на указанное число точек. Количество точек передается в скобках этих команд. Идти вперед означает, что черепаха будет двигаться туда, куда направлена ее голова. Если черепаха отображается в виде стрелочки, то перемещение будет в направлении указателя. Движение назад означает пятиться задом, то есть черепаха будет двигаться в направлении своего хвоста.
Когда мы запускаем программу, то по-умолчанию голова черепахи повернута направо. Это значит, что если скомандовать forward, она пойдет направо, если backward, то налево. В любом случае отрезки будут горизонтальными.
write('Старт 1', align='right') stamp() forward(100) stamp() write('Финиш 1') teleport(0, -80) write('Старт 2') stamp() backward(200) stamp() write('Финиш 2', align='right')
Для поворота черепахи используются команды right, left и setheading. Первые, подобно forward и backward, являются относительными. Выполняя их, черепаха поворачивается направо (по часовой стрелке) или налево (против часовой стрелки) на указанный угол. В какую сторону она окажется повернута, зависит от ее исходной ориентации. Так, если она смотрела направо, а ей скомандовали left(90), то она будет смотреть вверх. Но если она смотрела вниз, эта же команда повернет черепаху головой направо.
Другое дело ‒ функция setheading. Ей передают абсолютные значения. Как известно, полная окружность составляет 360 градусов. Модуль turtle по-умолчанию сконфигурирован так, что 0° ‒ это когда черепаха повернута направо, 90° ‒ вверх, 180° ‒ налево, 270° ‒ вниз. И не важно, как она была повернута до этого. Если сказано setheading(45), черепаха однозначно повернет точно на северо-восток.
write(heading(), font=('Lora', 18, 'bold')) stamp() forward(200) setheading(90) write(heading(), font=('Lora', 18, 'bold'), align='right') stamp() forward(200) setheading(180) write(heading(), font=('Lora', 18, 'bold')) stamp() forward(300) setheading(270) write(heading(), font=('Lora', 18, 'bold')) stamp() forward(200)
В коде выше, кроме setheading мы еще используем метод heading, который возвращает текущий угол поворота, далее он передается в метод write. Так мы узнаем, как сейчас повернута черепаха.
Рассмотрим пример с методами left и right:
forward(100) left(45) forward(100) right(30) forward(100) teleport(-10, 0) setheading(180) forward(100) left(45) forward(100) right(30) forward(100)
У нас два одинаковых участка кода, которые рисуют две одинаковые кривые. Однако, из-за того, что перед выводом второй, исполнителю было задано другое направление, кривая оказалась повернутой.
У изученных на этом уроке команд есть сокращенные варианты:
forward‒fdbackward‒back,bkleft‒ltright‒rtsetheading‒seth
Задания для самостоятельной работы
- Пусть черепаха нарисует примерно то же самое, что в последнем примере урока, используя команду
backward. Телепортироваться можно только один раз. - Измените программный код последнего примера так, чтобы вторая кривая была зеркальным отражением первой (получится что-то вроде тазика).
- Используя команду
leftилиright, запрограммируйте вывод квадрата и равностороннего треугольника. - Придумайте программу, которая чертит прямоугольный треугольник.