Kitobni o'qish: «Python для детей. Анимация с черепашьей графикой», sahifa 3

Shrift:

Анимация изображений, построенных из полигонов

Для того, чтобы осуществить анимацию (движение) фигуры, рассмотренной в предыдущем параграфе, построенной из нескольких обьектов, необходимо применить команды движения к каждому из составляющих фигуру обьекту. Сейчас мы разберем варианты построения изображений на основе простых геометрических фигур. Такой метод позволит сформировать изображение, состоящее из нескольких геометрических фигур как один обьект и применить к нему существенно меньшее количество команд движения, упростив программу. Начнем с простешей фигуры: прямоугольника.

Анимация прямоугольника

Как мы уже говорили анимация работает как серия изображений, которые немного отличаются. Чтобы создать анимацию перемещения прямоугольника вправо, нам необходимо нарисовать прямоугольник, затем обозначить его как один обьект. Сделав это, мы сможем применить к прямоугольнику как к единому обьекту, все команды библиотеки turtle. В таблице 15 показана простая программа, реализующая нашу идею. Пoясним подробно код таблицы. Код t.begin_poly() между линиями 1 и 2 дает команду на создание полигона (в нашем случае прямоугольника). К нему (пямоугольнику) затем можно будет применять все команды библиотеки, так же, как мы применяем их к простым примитвам таким как turtle, квадрат круг, треугольник и т. д. Все коды, расположенные между строками обозначенными 1 и 2, создают полигон (в нашем случае прямоугольник). Длее, полученный прямоугольник добавляется к экрану(строка 4). Код линии 3 поворачивает полученный обьект-прямоугольник на 90 градусов. Теперь мы получили новый turtle-обьект (линия 5), к которому применимы все команды библиотеки. Обратим внимание на то, что в этом случае обьект-прямоугольник можно поворачивать (как видно из изображений, показанных в правой части таблицы) а также изменять размер полученного изображения с использованием команды t.shapesize (размер изображения). Несколько последовательных положений прямоугольника обьединенных в одном кадре с использованием команды t.stamp()), показаны на изображениях правой части таблицы.

Таблица 15



Пульсирующее сердце

Применим указанный прием для воспризведения пульсирующего сердца. Соответствующий скрипт программы показан в таблице 16.


Таблица 16



Скрипты между линиями 1 и 2 создают форму сердца из полигона с использованием основных команд черепашьей графики и базовых команд языка Python. Строки между линиями 2 и 3 определяют полученную геометрию формы сердца как обьект черепашьей графики. Коды между линиями 3 и 4 определяют бесконечный цикл, в котором размер сердца периодически изменяется, то увеличиваясь, то уменьшаясь.


Движущийся автомобиль

Используя указанный метод, можно построить более сложную геометрическую форму а затем применить к полученной форме все команды черепашьей графической библиотеки. Построим схематическое изображение формы автомобиля по заданным координатам вершин. Наш автомобиль будет состоять из следующих компонентов: кузов из двух полигонов (четырехугольник и трапеция), а также первое и второе колеса. Поясним коды таблицы 17. Команда, обозначенная линией с индексом *, обьявляет создание сложного обьекта, состоящего из нескольких полигонов. Первый четырехугольник (часть кузова автомобиля) задается кодами между линиями 1 и 2. Вершины первого многоугольника обозначены переменными pos1, pos2, pos3, pos4, сам полигон определяется переменной poly1. Коды между линиями 1 и 2 Строка с индексом ** добавляет первый полигон в геометрическую форму, которую мы хотим создать. Аналогично добавляется второй полигон с вершинами pos5, pos6, pos7 и pos8 (коды между линиями 2 и 3). Создав два полигона, формирующих кузов машины, добавляем первое и второе колесо с использованием кодов begin_poly() и end_poly() (коды между линиями 3 и 4). Создав автомобиль с использованием полигонов, определяем обьект car=turtle.Turtle(shape='car') с помощью черепашьей графики (коды между линиями 4 и 5). Движение автомобиля определяется строками, обозначенными индексами #6, #7, #8, через функцию(линия ***) motion с параметром angle. Несколько статических кадров полученной анимации показаны на изображениях в правой части таблицы.


Таблица 17



Движение автомобилей вдоль холмистой дороги

В этом примере рассмотрим как создать анимацию трех автомобилей с водителями вдоль холмистой дороги. При этом используем прием прошлого примера: автомобили с водителями построены с помощью полигонов-многоугольников. Этот метод позволяет использовать почти все команды черепашьей графики, в частности повороты изображения на зданный угол а также сжатие и растяжение обьекта, конечно, в добавление к основным командам графики. Полный код и несколько статических кадров показаны в таблицах 18-1 ,18-2 и 18-3) В представленном коде выделены следующие блоки: функция для построения полигонов определяется строками между линиями 1 и2; функция для построения окружностей(колеса автомобиля и глаза водителя расположена между строками 2 и 3; коды обращения к функции построения кузова автомобиля размещены между линиями 3 и 4; колеса автомобиля представлены кодами строк между линиями 4 и 5; коды, создающие водителя представлены строками между линиями 5 и 6; строки межу линиями 6 и7 определяют обьект автомобиль с водителем; коды между линиями 7 и 8 задают еще два автомобиля с использованием стандартной функции clone() черепашьей графики; строки между линиями 8 и 9 задают бесконечную анимацию- движение автомобиля; блоки между линиями 8 и 10, 10 и 11, а также между 12 и 13 определяют движение автомобилей по холмам. Изображение холмистой поверхности вставлено в окно экрана с использованием функции wn.bgpic('Street7.gif'), где файл 'Street7.gif' , определяющий изображение должен иметьрасширение gif и р должен быть расположен в том-же фолдере где основной исполняющий файл. Изображение окна экрана и код может быть скачан по адресу:

https://github.com/victenna/Cars-are-driven-over-the-Hill

Остановимся подробнее на описании представленных функций. Функция для построения полигонов фактически строит четырехугольники и поэтому определяется четырьмя вершинами: x1,y1; x2,y2; x3,y3; x4,y4. Кроме этого функция имеет в качестве параметров цвет прямоугольника и цвет окаймляющей его линии (в нашем случае цвет окаймляющей линии для всех четырехугольников черный). Функция для построения окружностей имеет следующие параметры: координаты точки (x,y), от которой начинаем рисовать круг, а также радиус круга r, и кроме этого цвет круга и окоймляющей его линии. Все обращения к этим функциям расположены между линиями 3 и 5. Кроме этого программа с помощью этих функций рисует и водителя.

Таблица 18-1



Таблица 18-2(продолжение Таблицы 18-1)



Таблица 18-3(продолжение Таблицы 18-2)



Движение автомобиля по окружности в вертикальной плоскости

Если все блоки, начиная с линии 6 и ниже заменить на те, что представлены ниже в таблице 19, получим иной сценарий движения автомобиля (петля Нестерова или американские горки). В этом примере с помощью черепашьей графики программы Python создаем анимацию: движение автомобиля вдоль вертикальной петли. Сама петля с окружающим пейзажем введена в окно экрана файлом изображения, выбранным из интернета. Файл изображения окна следующий: Street9(4).gif. Этот файл можно скачать по адресу:

https://github.com/victenna/Cars-are-driven-over-the-Hill

Таблица 19



Спиннер

В этом примере также, как и в предыдущем, строим полигоны для создания простого спиннера. Соответствующая программа показана в таблице 20. Строки между цифрами 1 и 2 определяют функцию для создания кругов, формирующих спиннер. В строках между цифрами 2 и 3 обращаемся к функции и задаем положение кругов и их цвета. Полигон (треугольник), являющийся основанием для спиннера, задан координатами в строках между цифрами 3 и 4. Наконец вращение самого спиннера определяется командами цикла, расположенными между цифрами 4 и 5.


Таблица 20



Yosh cheklamasi:
12+
Litresda chiqarilgan sana:
05 avgust 2020
Yozilgan sana:
2020
Hajm:
61 Sahifa 52 illyustratsiayalar
Mualliflik huquqi egasi:
Автор
Формат скачивания:
epub, fb2, fb3, ios.epub, mobi, pdf, txt, zip

Ushbu kitob bilan o'qiladi