Блог Портфолио Контакты Python уроки

Turtle. Линейные алгоритмы

👈 перейти ко всем урокам

Содержание урока

В Python есть готовый модуль для работы с графикой — Turtle (графические примитивы).

Любой рисунок — это комбинация геометрических фигур: отрезков, углов, окружностей и др.

В уроке вы узнаете:

Работа с графикой

Для работы с графикой нужно уметь:

Все данные в памяти компьютера хранятся в виде единиц и нулей — «есть сигнал» и «нет сигнала».

Пиксель — это минимальная (неделимая) часть графического изображения

Растр — это набор пикселей.

Растровое изображение — совокупность точек (пикселей), используемых для отображения картинки на экране компьютера.

Модуль turtle работает с растровой графикой.

Современные мониторы — цветные.
Цвет одного пикселя кодируется набором нулей и единиц.

Базовые цвета

Цвет

Название

Красный

"red"

Зелёный

"green"

Синий

"blue"

Жёлтый

"yellow"

Чёрный

"black"

Розовый

"pink"

Небесно-голубой

"light blue"

Оранжевый

"orange"

Ярко-зелёный

"lime"

Фиолетовый

"violet"

Модуль Tutrle

Графические объекты модуля turtle отрисовываются в отдельной части окна специальным исполнителем команд — черепашкой (англ. turtle — «черепаха»).

Подключение команд модуля turtle:

from turtle import *

Базовые команды

Команда

Значение

forward('количество пикселей')

Переместить черепашку вперёд на указанное число пикселей

left('количество градусов')

Повернуть черепашку влево на указанный угол в градусах

right('количество градусов')

Повернуть черепашку вправо на указанный угол в градусах

color('название цвета')

Установить исполнителю новый цвет с указанным названием

exitonclick()

Оставить изображение на экране после исполнения программы

pensize('количество пикселей')

Изменить размер пера, которым рисует исполнитель (изначально — 1)

circle('радиус круга')

Нарисовать круг с заданным радиусом в пикселях

begin_fill()

Начать заливку фигуры (следом идёт команда рисования фигуры)

end_fill()

Завершить заливку фигуры

penup()

Поднять перо исполнителя (полезно при рисовании нескольких фигур)

pendown()

Опустить перо исполнителя

goto('координата Х', 'координата Y')

Переместить исполнителя в точку с указанными координатами

Отрисовка квадрата

Задача. Заказчик предпочитает минимализм и хочет купить плитку с рисунком квадрата. Напишите программу, отрисовывающую чёрный квадрат без заливки со стороной 150 пикселей.

from turtle import *
forward(150)
left(90)
forward(150)
left(90)
forward(150)
left(90)
forward(150)
exitonclick()

Результат работы:

Отрисовка квадрата PyQT
Отрисовка квадрата PyQT

Перед тем как продолжить:

  1. Как изменить программу, чтобы черепашка отрисовывала не чёрный, а красный квадрат?
  2. Клиент передумал и решил украсить плитку более мелкими квадратами со стороной 90. Сколько строк программы нужно изменить? Как?

Отрисовка треугольника

Как нарисовать треугольник? Какие команды нужно использовать?

Задача. Заказчик хочет плитку с треугольниками. Он ещё не определился с цветом, поэтому нужно запрограммировать оба: красный и голубой. Длина стороны треугольника — 110 пикселей.

from turtle import *
color('red')
forward(110)
left(120)
forward(110)
left(120)
forward(110)
left(120)
color('blue')
forward(110)
left(120)
forward(110)
left(120)
forward(110)
exitonclick()

Результат работы в процессе рисования:

Отрисовка треугольника PyQT
Отрисовка треугольника PyQT

Перед тем, как продолжить:

  1. Как изменить программу, чтобы черепашка отрисовывала больший треугольник со стороной 150?
  2. Клиент хочет добавить к сравнению ещё один цвет — зелёный. Как изменить программу, чтобы она отрисовывала треугольники трёх цветов?

Координатная плоскость

Положение черепашки на плоскости определяется двумя числами — координатами.

При запуске программы черепашка появляется в начальной точке (0, 0).

Чтобы переместить исполнителя, нужно задать ему новые координаты и использовать функцию:

goto('координата Х', 'координата Y')

Отрисовка трёх кругов

Какие расположить круги в разных местах?

Задача. Запрограммировать узор для обоев из трёх кругов.

Параметры кругов:

from turtle import *
#желтый круг
penup()
goto(-150, 130)
pendown()
color('yellow')
begin_fill()
circle(30)
end_fill()
#зелёный круг
penup()
goto(0, -100)
pendown()
color('green')
begin_fill()
circle(40)
end_fill()
#красный круг
penup()
goto(130, 110)
pendown()
color('red')
begin_fill()
circle(50)
end_fill()
exitonclick()

Результат работы:

Отрисовка трех треугольников PyQT
Отрисовка трех треугольников PyQT

Перед тем, как продолжить:

  1. Даны координаты точек перемещения черепашки: (100, 120), (0, -100), (-150, 0), (100, 120). Какая фигура отобразится на координатной плоскости после перемещения (за это время перо не поднималось)?
  2. Как изменить код предыдущей программы, чтобы вместо узора из кругов появился аналогичный узор из квадратов?
  3. Можно ли оптимизировать прошлую программу с помощью функций? Как?