Использование Manim + Python для визуализации. Перестановка (комбинаторика)

c02d4b29a8eda49d6d35f31af57684e5.png

Вместо введения

Несмотря на то, что математика сегодня — это глубокий андерграунд, работы 3Blue1Brown вдохновляют и пробуждают внутри что-то из далёкого детства, где весь мир был непостижимой игровой площадкой, а из кислого были только муравьиные жопки. Конечно, очень хочется как-то прикоснуться к прекрасному. Тем более, что Грант Сандерсон разработал для этого целую библиотеку и безвозмездно передал её нам, безымянным кодерам со всего мира.

Знакомство с Manim

Есть отличный сайт с документацией и примерами от сообщества. И в ру-сегменте, в частности на Хабре, также можно найти базовые туториалы [1, 2, 3]. Однако, при первом же взаимодействии понимаешь, что мало обучалок для проекта, у которого 39 тысяч звёзд Github. С вязи с чем, о-о-очень радует, что chatGPT отлично умеет в Manim и сможет вам помочь почти с любым вопросом.

Выбор темы

Цель работы — сэкономить время следующему поколению на изучение выбранного топика. В первую очередь хотелось что-то жизненное для пацанов с района среднего студента. А так как я и сам сейчас разбираюсь с матстатом, то комбинаторика пришла в голову почти моментально. Там, конечно, поле непаханое в плане визуализации, поэтому я взял самое базовое. Если тема зайдёт, то продолжу в том же направлении, а если не зайдёт. всё равно продолжу, но уже грустнее.

Код

Весь скрипт целиком можно забрать в репозитории. Так же на всякий случай ссылка на виртуальное окружение для python’а.

Запуск скрипта происходит с помощью команды:

manim -pqh manim_cnm.py Permutations_3 -r 1920,1080
  • -pqh обозначает графику высокой четкости (можно указывать и -pql)

  • флаг -r обозначает выбор разрешения

В скрипте можно выделить 4 блока:

  1. импорты

  2. очистка каталога от результатов предыдущих запусков

  3. функции

  4. классы анимаций, которые в моём случае унаследованы от movingCameraScene

Скрипт использует SVG объекты, которые в широком ассортименте представлены на бесплатных площадках. Нужные картинки для работы скрипта лежат там же в репозитории.

Наследование movingCameraScene обоснованно немного более широким функционалом, который позволяет двигать камеру и расставлять акценты на объектах.

Анимация разбита на четыре класса. Это позволяет быстрее отлаживать, но при необходимости можно объединить. Нужно учитывать, что видео в папке media/videos каждый раз перетирается.

Итоговый вариант получившегося видео с объяснением перестановок:

Минусы

  • Время. Даже небольшая анимация собирается довольно долго. С учетом отладки, на пересборку анимации в общей сложности уходят целые часы. ЕСЛИ КТО-ТО ЗНАЕТ КАК УСКОРИТЬ, ПОЖАЛУЙСТА, РАССКАЖИТЕ.

  • Сложность для обывателя. Даже такую простую тему, мне кажется, я смог раскрыть на троечку, а ведь реально старался. При этом у меня была дополнительная (скорее основная) мотивация подучить python. Рядовой учитель однозначно выберет мел и доску, чтобы за минуту нарисовать формулу, а не колбаситься с кодом часами на пролёт.

  • Небольшая аудитория. «Вашу публикацию очень ждут во всем мире. Два человека.» Этим афоризмом можно описать попытки работать в данном направлении. Для упражнения — отлично, для какой-то более конкретной цели — не стоит (ударение сами поставьте).

  • Конкурентны. Слышал мнение, что такое гораздо быстрее сделать в After Effects. Не знаю, не пробовал, но верю.

Вывод

Появление Manim мне представляется одним из ключевых шагов на пути создания коллективного учебника математики, который позволил бы будущим поколениям очень оптимизировать свои усилия на «вкатывание» в предмет. Но сейчас рядовой учитель математики не сможет и не станет делать такое на постоянной основе, потому что нормальный видео урок тогда потребует сотни человеко-часов неоплачиваемых трудозатрат. Чтобы, например, переделать «сто уроков по математике» по такой технологии нужны нечеловеческие инвестиции, хоть это и стало бы реальным шагом в образовании.

© Habrahabr.ru