Навигация по странице
Функции движения черепахи
Функция forward(distance)
перемещает черепаху вперёд на указанное расстояние distance по направлению, куда она смотрит. Дистанция перемещения измеряется в пикселях.
При движении черепаха оставляет за собой линию, если перо опущено (по умолчанию).
Функция forward()
также имеет сокращённое имя fd()
.
Для перемещения черепахи назад используется функция backward(distance)
, которая точно также принимает расстояние distance в пикселях.
Функция backward()
так же, как и forward()
, имеет сокращения: back()
и bk()
.
Например, следующий код позволит сначала отправить черепаху вперёд на 100 пикселей, затем назад на 200 пикселей.
from turtle import *
forward(100)
back(100)
done()
Функции right(angle)
/left(angle)
служат для поворота черепахи по часовой/против часовой стрелки на заданный угол angle.
Обе функции имеют сокращённую запись: rt()
для right()
и lt()
для left()
.
Для примера, давайте повернём нашу черепаху на 225 градусов против часовой стрелки. Для этого вызываем функцию left()
в аргументом 225: left(225)
.
Аналогичное направление можем получить, если вызовем функцию right()
с аргументом 135 (360 – 225).
Теперь, когда мы знаем функции для перемещения и поворотов, давайте нарисуем простую фигуру с помощью черепахи. Начертим прямоугольник, с длиной 150 пикселей и шириной 100 пикселей.
Для этого нам нужно из начала координат пойти прямо по направлению «взгляда» черепахи на 150 пикселей, повернуться против часовой стрелки на 90 градусов, пойти прямо на 100 пикселей, снова повернуться на 90 градусов, пойти вперёд на 150 пикселей, последний раз повернуться на 90 градусов и пойти вперёд на 100 пикселей. В коде это будет выглядеть так:
from turtle import *
forward(150)
left(90)
forward(100)
left(90)
forward(150)
left(90)
forward(100)
done()
Обратите внимание, что функции left()
и right()
поворачивают черепаху на заданный угол в зависимости от её направления в текущий момент, а не от исходного положения. Допустим, сейчас черепаха смотрим строго на север (на верх), то есть её положение равняется 90 градусов против часовой стрелки от изначального.
Теперь если ввести команду left(30)
, то черепаха повернётся против часовой стрелки (влево) на 30 градусов. И её новое угловое направление составит 120 градусов от изначального.
Вместо поворотов на заданный угол через функции left()
и right()
можно использовать функцию setheading(to_angle)
, которая позволяет повернуть черепаху сразу на заданный угол to_angle. Сокращением данной функции является seth()
.
Угол отсчитывается против часовой стрелки:
- 0° — Черепаха смотрит вправо (вдоль положительной оси X).
- 90° — вверх (вдоль положительной оси Y).
- 180° — влево (вдоль отрицательной оси X).
- 270° — вниз (вдоль отрицательной оси Y).
Таким образом, можем переписать прошлый код, используя функцию setheading()
вместо left()
:
from turtle import *
forward(150)
setheading(90)
forward(100)
setheading(180)
forward(150)
setheading(270)
forward(100)
done()
Помимо перемещений вперёд, назад и поворотов, в модуле turtle также есть функция для перемещения к указанным координатам. Это функция goto()
и её альтернативные названия: setpos()
, setposition()
.
Функция goto(x,y)
принимает 2 аргумента x и y, которые обозначают горизонтальные (x) и вертикальные (y) координаты холста. Данная функция не изменяет угловое направление черепахи.
Так же, как и с функциями forward()
и backward()
, при перемещении с помощью goto()
черепаха оставляет за собой линию, если перо не поднято.
Давайте нарисуем диагональ нашего прямоугольника из прошлого примера. Добавим в конец кода строку goto(150,100)
.
from turtle import *
forward(150)
setheading(90)
forward(100)
setheading(180)
forward(150)
setheading(270)
forward(100)
goto(150,100)
done()
Если вам все еще нужно переместить черепаху в заданные координаты, но не оставлять линию, то можно «телепортировать» черепаху с помощью функции teleport()
. Но обатите внимание, что данная функция доступна в версии 3.12 и выше!
Если функция goto()
предназначения для изменения сразу двух координат, то функции setx()
и sety()
позволяют менять только абсциссу или ординату нашей черепахи, соответственно.
Например, может построить такой же прямоугольник, но без поворотов черепахи, просто последовательно меняя её координаты.
from turtle import *
setx(150)
sety(100)
setx(0)
sety(0)
done()
Функция home()
позволяет черепахе вернуться в начало координат — в точку с координатами (0,0).
Функция circle()
С прямыми линиями мы разобрались. Но как начертить окружность? Для этого существует функция circle()
.
Функция circle(radius, extent=None, steps=None)
рисует окружность или дугу с заданным радиусом. Она может использоваться для создания как полных кругов, так и их частей (дуг).
Если в качестве аргумента передано только одно значение radius, то функция рисует окружность с заданным радиусом. Если передан еще аргумент extent, то будет нарисована дуга, с углом extent в градусах.
Также можно начертить вписанный правильный многоугольник, если передать аргумент steps, который обозначает количество углов этого многоугольника.
Обратите внимание, что направление рисования зависит от знака радиуса: положительный — против часовой стрелки, отрицательный — по часовой стрелке.
Проверим работу функции circle()
с разным количеством переданных аргументов.
Сначала передадим только радиус 75, в итоге получаем окружность, заданного радиуса, центр которой находится в точке с координатами (0,75).
from turtle import *
circle(75)
done()
Далее передадим еще один параметр extent=90. В итоге получим дугу в 90 градусов с радиусом 75.
from turtle import *
circle(75, extent=90)
done()
Теперь же нарисуем правильный восьмиугольник, вписанный в окружность радиуса 75. Для этого передадим аргумент steps=8.
from turtle import *
circle(75, steps=8)
done()
Если указать оба параметра extent и steps, получится многоугольная дуга. Давайте теперь передадим радиус отрицательным значением и нарисуем половину вписанного восьмиугольника.
Для этого аргументу radius присваиваем значение -75, аргументу extent — 180 градусов, а количество шагов дуги должно быть теперь в 2 раза меньше, чем у восьмиугольника (мы же рисуем его половину), следовательно, steps=4.
from turtle import *
circle(-75, extent=180, steps=4)
done()
Функции состояния черепахи
Получить текущие координаты черепахи можно при помощи функции position()
(её сокращение — pos()
).
Данная функция возвращает объект Vec2D, который может быть передан другим функциям модуля turtle, например goto()
.
Отдельно получить абсциссу и ординату текущего положения черепахи в числовом виде можно с помощью функций xcor()
и ycor()
, соответственно.
Давайте отправим нашу черепаху в координаты (150, 100) и выведем сначала значение, которое вернёт функция position()
, а затем результаты функций xcor()
и ycor()
.
from turtle import *
goto(150,100)
current_position = position()
x_coord = xcor()
y_coord = ycor()
print('Текущая позиция: ', current_position)
print('Абсцисса: ', x_coord)
print('Ордината:', y_coord)
done()
Функция towards(x, y)
позволяет вернуть угол (в градусах), на который нужно повернуть черепаху, чтобы она смотрела в направлении указанной точки (x, y) на экране. Угол отсчитывается от текущей позиции черепашки и ориентирован относительно оси X.
Например, можем узнать угол между начальным положением черепахи (угол 0) и точкой с координатами (100,100) с помощью следующего кода:
from turtle import *
angle = towards(10,10)
print(angle)
В результате получаем угол в 45 градусов.
Вернуть текущий угол направления черепахи в градусах относительно оси X можно с помощью функции heading()
.
Функция distance(x, y)
позволяет вернуть евклидово расстояние между текущими координатами черепашки и заданной точкой с координатами (x, y).
Например, давайте узнаем расстояние от начала координат, то точки с координатами (100, 100). В этом нам поможет следующий код:
from turtle import *
dist = distance(100,100)
print(dist)
Теперь давайте скомбинируем два метода towards()
и distance()
, чтобы отправить черепаху к точке с координатами (100, 100) так, чтобы она смотрела лицом по направлению пути. Сначала поворачиваем черепаху методом towards()
на требуемый угол, а затем функцией forward()
движемся на расстояние, которое вернёт функция distance()
.
Код будет следующий:
from turtle import *
# Координаты точки
x, y = 100, 100
# Вычисляем угол
angle = towards(x,y)
# Поворачиваем черепаху
setheading(angle)
# Вычисляем расстояние
dist = distance(x,y)
# Движемся вперёд по заданному углу
# на длину dist
forward(dist)
done()
Другие статьи по теме доступны по ссылкам: