Scratch3 крайне интересная среда, ввиду очень низкого порога вхождения, простоты восприятия и разнообразия предоставляемых возможностей. Поэтому ее можно использовать для реализации проектов учащихся даже в случае, если они не занимаются углубленно программированием. Такими, например, могут стать проекты по моделированию.
В качестве примера сегодня мы начинаем цикл, посвященный моделированию движения объектов под действием силы упругости. В свое время эти проекты предложил коллега по Лаборатории 169 Александр Григорьев и хочется познакомить с ними широкий круг читателей.
Реализация проекта позволит нам заложить основу для решения самых разнообразных учебных и проектных задач. Например, мы сумеем воспроизвести в компьютерной игре на базе Scratch поведение двух или нескольких бильярдных шаров при столкновении, либо сделать симулятор робофутбола, в котором лёгкий мяч будет правдоподобным образом отскакивать от тяжелого робота, когда тот подъезжает к нему с некоторой скоростью. Кроме того, мы научимся учитывать и другие силы - трение качения, сопротивление воздуха. Наша физическая модель превратится в интересный инструмент, позволяющий проводить виртуальные "физические опыты" на экране компьютера.
После реализации текущего проекта мы получим готовую компьютерную модель упругого взаимодействия объектов, которую можно будет модифицировать для того или иного частного применения.
Определим основные этапы нашей работы:
- подготовка всего необходимого;
- моделирование гармонических (упругих) колебаний объекта, двигающего по прямой (в одномерном пространстве);
- учёт сил трения (затухающие колебания);
- преобразование модели в модель движения по инерции с повторяющимися упругими столкновениями;
- моделирование столкновений двух круглых объектов на плоскости (в двухмерном пространстве) с дальнейшим движением их по инерции;
- в перспективе - модель движения на горизонтальной или наклонной плоскости группы круглых объектов, имеющих разный размер, массу, скорость, коэффициент упругости, коэффициент трения и аэродинамическое сопротивление с обсчётом множественных, в том числе одновременных столкновений.
Конечно же нам придётся разбивать каждую подзадачу на ещё более мелкие. Будем двигаться по шагам. Кроме того, первые базовые задачи удобнее решать в среде Scratch, а вот для работы не с двумя объектами, а со множеством потребуется более совершенная среда программирования - Snap4arduino, о которой мы так же рассказывали в нашей Лаборатории 169.
Создание модели множественных столкновений на первый взгляд воспринимается невероятно сложным, однако принцип разбиения задачи на составные части позволяет собрать итоговый проект буквально "по кусочкам", а каждая отдельная подзадача сама по себе не так уж сложна.
Подготовка
Мы будем использовать визуальную среду Scratch3. Онлайн-редактор можно открыть по следующей ссылке.
https://scratch.mit.edu/projects/editor/
Тот, кому удобнее будет работать с оффлайн-версией Scratch, может загрузить инсталляционный пакет для используемой операционной системы и установить программу на свой компьютер.
https://scratch.mit.edu/download
Этап 1. Воссоздаём гармонические колебания и рисуем синусоиду
Гармонические колебания в пространстве
— колебания, при которых положение объекта изменяется с течением
времени по гармоническому (синусоидальному, косинусоидальному) закону.
ru.wikipedia.org/wiki/Гармонические_колебания
Для нас существенным является то, что
тело совершает гармонические колебания под действием силы,
пропорциональной смещению от положения равновесия и направленной
противоположно этому смещению. Типичный пример - некий груз,
колеблющийся между двумя пружинами.
Давайте смоделируем такую систему в Scratch. Создайте новый проект, удалите из него спрайт кота, добавьте подходящий новый спрайт. Пусть это будет "Ball" из библиотеки спрайтов.
Кроме того, в библиотеке фонов есть полезное для нас изображение с
именем "Xy-grid", установите этот рисунок как фон, выбрав объект Сцена.
Выберите снова спрайт "Ball", переместите его в центр экрана при помощи блока "перейти в x: (0) y: (0)". Переименуйте, назвав "Мяч".
Для наглядности и гибкости проекта создайте переменные со следующими именами: "скорость", "ускорение", "масса", "жёсткость" и "деформация". Все они должны быть локальными, при создании укажите опцию "только для этого спрайта". Это позволит в нам в будущем иметь в проекте несколько спрайтов, работающих сходным образом.
По умолчанию выставлен маркер отображения значения переменной на сцене. Можно увидеть, что каждая переменная имеет префикс "Мяч" в названии.
Следует отметить, что характеристики "жёсткость" и "деформация" относятся не к самому мячу в нашей модели, а к тем условным "пружинам", на которых мяч "подвешен". Произведение жёсткости на деформацию пружины (пружин) определяет силу, которая действует на мяч.
Соберите следующий скрипт.
Обратите внимание, что последние два блока скрипта - не "задать", а "изменить".
Запустите программу. Что произошло?
Ровно ничего, и это вполне естественно. Мяч находится в точке равновесия
и его начальная скорость равна нулю, поэтому он и не стал двигаться.
Поменяйте начальное положение мяча, отредактировав значение X в блоке
"перейти в...". x=200 y=0
Запустите программу снова. Теперь мяч начал колебаться влево-вправо. Как видите, крайние точки его траектории это 200 и -200. Для того, чтобы понаблюдать за процессом повнимательнее, увеличьте массу мяча в 10 раз. Теперь можно успевать отслеживать изменения параметров во время колебаний.
Однако картина может быть ещё нагляднее, если заставить мяч рисовать график своих перемещений. Сделать это несложно. Разберем это в следующем материале проекта. До встречи!