МАТЕМАТИЧЕСКАЯ АНИМАЦИЯ В КОМПЬЮТЕРНОМ МОДЕЛИРОВАНИИ: КАРДИОИДА

Статья опубликована в рамках: Международной научно-практической интернет-конференции «Актуальные проблемы методики обучения информатике и математике в современной школе» (Россия, г.Москва, МПГУ, 22 — 26 апреля 2019г.)

МАТЕМАТИЧЕСКАЯ АНИМАЦИЯ В КОМПЬЮТЕРНОМ МОДЕЛИРОВАНИИ: КАРДИОИДА

Дженжер Вадим Олегович,
кандидат физико-математических наук, доцент,
Оренбургский государственный педагогический университет
Денисова Людмила Викторовна,
кандидат педагогических наук, доцент,
Оренбургский государственный педагогический университет

Аннотация: в статье рассматривается задача геометрического моделирования кардиоиды как огибающей семейства хорд в курсе компьютерного моделирования. Используются новые возможности графических модулей языка программирования PascalABC.NET для создания анимации.

Ключевые слова: компьютерное моделирование, геометрическое моделирование, программирование.

Содержательная линия «Моделирование и формализация» является одной из системообразующих в школьном курсе информатики и ИКТ. Подготовка учителей информатики в педагогическом вузе включает дисциплину «Компьютерное моделирование». Структура этого курса в целом устоялась [4, 5, 7]. Как легко заметить, этот курс ориентирован главным образом на изучение физических моделей. В этом нет ничего удивительного, поскольку именно физика предлагает наиболее простые и наглядные модели. При подготовке студентов по направлению «Педагогическое образование», профилю «Математика и информатика» мы обычно предлагаем в начале курса моделирования ряд задач, связанных с графическими построениями математических кривых. Уверенное использование графических возможностей компьютера существенно облегчает в дальнейшем визуализацию построенных моделей.

В качестве основного средства разработки программ мы используем мощный современный язык программирования PascalABC.NET [6], разработанный в Южном федеральном университете, г. Ростов-на-Дону. Этот язык, с одной стороны, содержит всё необходимое для обучения школьника:

  • удобный текстовый редактор с поддержкой отладчика, Intellisense и автоформатирования кода;
  • встроенные исполнители Робот и Чертёжник с автоматической проверкой решений и возможностью создания собственных заданий; команды исполнителей можно давать как на английском, так и на русском языках;
  • встроенный модуль Programming Taskbook, содержащий множество задач по различным разделам программирования с возможностью автоматической проверки решений;
  • графические модули GraphABC и GraphWPF (более современный, чем первый) для работы с двухмерной графикой, а также модуль Graph3D для создания трёхмерных моделей.

С другой стороны PascalABC.NET — это современный язык программирования, дающий возможность отказаться от стандартов программирования тридцатилетней давности, навязываемых давно устаревшими Turbo Pascal и Free Pascal. Школьники с первых занятий могут использовать кортежи, автовыведение типов и другие средства современного стиля программирования, делающие программу короткой, читаемой и легко модифицируемой.

Ну и, наконец, PascalABC.NET — бесплатное и открытое программное обеспечение, что является немаловажным для школы и вуза.

На занятиях по компьютерному моделированию мы вначале предлагаем ряд задач на построение графиков функций, заданных в декартовой и полярной системе координат, а также заданных параметрически. Наиболее интересными являются задачи, использующие анимацию. Познакомиться с математической анимацией можно, например, на сайте [3], который содержит огромное количество анимированных моделей, связанных с математикой и техникой. Нам кажется интересным не просто использовать готовые модели, но и самим создавать их. Графические модули GraphWPF и Graph3D позволяют c лёгкостью анимировать картинку. Мы рассмотрим следующую задачу: построим кардиоиду как огибающую семейства отрезков. Будем использовать следующий алгоритм [2, 8]:

  1. нарисуем окружность, на которой разместим точек, равноотстоящих друг от друга; точки пронумеруем так: 0, 1, …, N-1;
  2. последовательно будем соединять отрезками точки: 0\rightarrow0, 1\rightarrow2, 2\rightarrow4, …, i\rightarrow(2i)modN;
  3. с ростом N будем наблюдать возникновение кардиоиды как огибающей семейства построенных хорд.

Например, для  N=10 получим следующую картину (рис. 1):

Рис. 1. Семейство хорд для  N=10 

Глядя на приведённый рисунок довольно просто понять алгоритм, но пока ещё нельзя увидеть результат, потому что количество точек слишком мало и огибающая отрезков практически незаметна. Увеличим количество точек до 100 (рис. 2).

Рис. 2. Семейство хорд для

В этом случае уже хорошо видно, что огибающей семейства построенных хорд является кардиоида. Рассмотрим процедуру рисования подробнее (листинг 1).

Листинг 1.
Процедура рисования кадра с  точками

Параметрами процедуры являются  (количество точек) и цвет хорды, который имеет значение по умолчанию YellowGreen. В строках 3–12 мы определяем параметры рисования, такие как цвет, размер и положение объектов. Затем в строках 15–29 размещаем  равноотстоящих точек на окружности и подписываем их номера. Для этого мы вычисляем положение точек в полярной системе координат, а затем переводим их в экранную декартову систему координат. В строках 33–34 мы рисуем хорды, соединяя точки  и .

Главная программа в этом случае будет очень простой (листинг 2):

Листинг 2.
Главная программа для рисования одного кадра

Программа для построения одной картинки довольно проста. Однако хотелось бы сделать мультипликацию, показывающую, как возникает огибающая семейства отрезков с ростом количества точек . Для этого в PascalABC.NET имеется процедура BeginFrameBasedAnimation, которая создаёт покадровую анимацию. Эта процедура принимает в качестве параметра другую процедуру, которая собственно и осуществляет рисование очередного кадра. Процедура рисования кадра может иметь целочисленный параметр, имеющий смысл номера кадра. Через него мы будем передавать количество точек, размещаемых на окружности. Процедура рисования кадра может быть оформлена стандартным способом (т. е. размещена в разделе описаний программы) или может быть передана в BeginFrameBasedAnimation как анонимная процедура (лямбда-процедура). Мы воспользуемся смешанным способом: наша процедура рисует картинку для  точек, а вызывать её мы будем из лямбда-процедуры, в которой будем менять номер кадра. Процедура Cardioid при этом останется прежней, а изменения коснутся только главной программы, которая приобретёт следующий вид (листинг 3):

Листинг 3.
Главная программа для создания анимации

Здесь в BeginFrameBasedAnimation передаётся лямбда-процедура с одним целочисленным параметром — номером кадра. В этой процедуре (строки 7–12) рисуется очередной кадр, после чего номер кадра увеличивается на единицу. Проверка в строке 10 позволяет остановить анимацию, когда количество показанных кадров превысит желаемое. Для остановки анимации используется процедура EndFrameBasedAnimation. Закрывающаяся круглая скобка в строке 13 относится к первой открывающейся скобке в BeginFrameBasedAnimation (строка 6).

Поскольку мы не можем вставить анимацию в статью, приведём ссылку на репозиторий GitHub, где размещены исходный код программы и её скомпилированная версия [1]. Следует отметить, что для работы скомпилированной программы требуется Microsoft .NET Framework.

Дальнейшие эксперименты с программой можно провести в следующем направлении. Изменим правило построения хорды \rightarrow (2i) mod N  на другое. Например, положим \rightarrow (3i) mod N. В этом случае мы получим процедуру построения другой кривой — нефроиды, которая имеет не один, а два каспа. Вообще, при переходе \rightarrow (ki) mod N, где k=1,2,… , будем получать фигуру с (k-1) каспом. Хотя с увеличением k огибающую заметить всё сложнее из-за большого количества отрезков. В процессе анимации, например, для k=19, будем получать следующие кадры (рис. 3):

Рис. 3. Кадры при построении семейства хорд по правилу  \rightarrow (19 i) mod N

Решение графических задач повышает мотивацию студентов к изучению программирования и моделирования. Модели, аналогичные приведённой в статье, кажутся студентам-математикам более близкими и наглядными, чем физические модели, что облегчает им вхождение в предмет моделирования.

ЛИТЕРАТУРА:

  1. Анимация построения кардиоиды на GitHub. URL: https://github.com/vdjenjer/AnimCardioid
  2. Кардиоида на Википедии. URL: https://en.wikipedia.org/wiki/Cardioid#Cardioid_as_envelope_of_a_pencil_of_lines
  3. Математические этюды. URL: etudes.ru
  4. Майер Р. В.Компьютерное моделирование: учебно-методическое пособие для студентов педагогических вузов [Электронное учебное издание на компакт-диске]. – Глазов: Глазов. гос. пед. ин-т, 2015. URL: https://sites.google.com/site/mayerrv/comp_mod
  5. Могилёв А. В., Пак Н. И., Хеннер Е. К. Информатика: учеб. Пособие для студ. пед. вузов. Изд. 8-е. — М.: Издательский центр «Академия», 2012. — 848 с.
  6. Современное программирование на языке Pascal. URL: http://pascalabc.net/
  7. Тарасевич Ю. Ю. Математическое и компьютерное моделирование. Вводный курс: Учебное пособие. Изд. 4-е, испр. — М. Едиториал УРСС, 2004. — 152 с.
  8. Трошин П. И. Компьютерная геометрия и геометрическое моделирование (задачи). Учебно-методическое пособие — Казань: Казанский федеральный университет, 2015. — 55 с.
Подписаться
Уведомить о
guest
2 комментариев
oldest
newest
Inline Feedbacks
View all comments
Босова Л.Л.
Босова Л.Л.
4 лет назад

Уважаемые Вадим Олегович и Людмила Викторовна!
Полностью согласна с вами, что «решение графических задач повышает мотивацию студентов к изучению программирования и моделирования». Как вы считаете, можно подобные задачи ставить перед школьниками?

Вадим Дженжер
Вадим Дженжер
Reply to  Босова Л.Л.
4 лет назад

Уважаемая Людмила Леонидовна! Спасибо за интерес, проявленный к нашей работе! Отвечая на Ваш вопрос, можем сказать, что у нас есть опыт ведения занятий по компьютерному моделированию со старшими школьниками (10-11 класс). Следует особо отметить, что это не школьные занятия: в основной массе школьники к такому не готовы. Мы работаем в центре физико-математического образования «Архимед», где собираются заинтересованные и подготовленные (по математике и программированию) ребята, с интересом занимающиеся моделированием. Кроме собственно графики мы знакомимся с физическими моделями, моделями экологии, случайными процессами. Обязательно рассматриваем построение фракталов, причём не только геометрических, но и алгебраических. Отдельно хочется отметить, что работа с графикой в PascalABC.NET… Read more »