Шарик на пружинке (АГВЗ15-02)
.pdfс/к Анализ и генерация видео и звука в реальном времени
Шарик на пружинке
Реализация проекта на Processing и openFrameworks
Д.С. Перевалов, весна 2015 г., УрФУ-ИММ, г. Екатеринбург
http://uralvision.blogspot.com http://vk.com/lections_media_processing https://www.facebook.com/LectionsMediaProcessing
План лекции
1.Идея проекта
2.Эскиз, математическая модель
3.Реализация (Processing, openFrameworks)
4.Дальнейшее развитие
5.Подготовка модели для 3D принтера
1. Идея проекта
Сымитировать движение шарика, подвешенного на пружинке.
2. Эскиз и мат. модель
Точка подвеса
Пружинка
Шарик
2. Эскиз и мат. модель
Точка подвеса (Bx, By)
Пружинка, длина покоя L
Сила Гука kΔ
Шарик (Px, Py)
Сила тяжести mg
Второй закон Ньютона |
F = mA |
Связь скорости и ускорения |
dV/dt = A |
Связь положения и скорости dP/dt = V
3. Реализация
Processing
основан на Java, простая установка, прост в изучении
openFrameworks
похож на Processing, но основан на C++, требует установки компилятора
позволяет использовать преимущества C++
Processing
Скачать с http://processing.org и распаковать
Processing
Проект в Processing называется “скетч”. Чтобы попробовать готовые скетчи:
1.Нажать меню File - Examples, появится диалог выбора примеров.
2.Выбрать какой-либо пример и открыть, и запустить.
Запуск
Примеры
Скетч
Консольное
окно (для ошибок и
сообщений)
Скетч
float L = 100; |
//Длина покоя пружинки |
float k = 0.01; |
//Коэффициент силы Гука |
float g = 9.8; |
//Ускорение свободного падения |
float m = 0.1; |
//Масса шарика |
float dt = 3.0/60.0; |
//Время (ускорили в 3 раза) |
float Bx = 500; |
//Положение подвеса |
float By = 300; |
|
float Px = 700; |
//Положение шарика |
float Py = 150; |
|
float Vx=0; |
//Скорость шарика |
float Vy=0; |
|
void setup() { |
|
size(1024, 768); |
//Установка размеров окна |
} |
|
void draw() {
//Вычисление силы Гука float deltaX = Px - Bx;
float deltaY = Py - By;
float len = sqrt( deltaX * deltaX + deltaY * deltaY ); float Hook = k * ( L - len );
float Hookx = (deltaX/len) * Hook; float Hooky = (deltaY/len) * Hook;
//Вычисление общей силы, действующей на шарик float Fx = Hookx;
float Fy = Hooky + g * m;