Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шарик на пружинке (АГВЗ15-02)

.pdf
Скачиваний:
2
Добавлен:
03.05.2015
Размер:
384.19 Кб
Скачать

с/к Анализ и генерация видео и звука в реальном времени

Шарик на пружинке

Реализация проекта на 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

Сила Гука

Шарик (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;