КП: Многочастичный симулятор — различия между версиями
(→Возможности консоли) |
George (обсуждение | вклад) м (→Команды консоли) |
||
Строка 107: | Строка 107: | ||
Задать вектор скорости (относительно начала координат) | Задать вектор скорости (относительно начала координат) | ||
− | *'''setVelocity 0 (10,10)''', где | + | *'''setVelocity #0 (10,10)''', где |
0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли. </ref> | 0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли. </ref> | ||
+ | |||
+ | Задать массу | ||
+ | |||
+ | *'''setProps #0 'mass' 10''', где | ||
+ | |||
+ | 0 - id частицы | ||
+ | |||
+ | 10 - новая масса | ||
+ | |||
+ | *'''setProps #0 'invmass' 0.1''', где | ||
+ | |||
+ | 0 - id частицы | ||
+ | |||
+ | 10 - обратное значение новой массы | ||
Создать пружину между частицами | Создать пружину между частицами | ||
− | *'''addSpring | + | *'''addSpring #0 #1''' c, где |
0, 1 - id частиц | 0, 1 - id частиц | ||
+ | |||
+ | c - жёсткость пружины | ||
+ | |||
+ | Изменить жёсткость пружины | ||
+ | *'''changeSpring #5 10''', где | ||
+ | |||
+ | 5 - id пружины | ||
+ | |||
+ | 10 - новая жёсткость | ||
+ | |||
+ | Изменить жёсткость одинаковых пружин | ||
+ | *'''changeSprings 10->15''', где | ||
+ | |||
+ | 10 - текущая жёсткость | ||
+ | |||
+ | 15 - новая жёсткость | ||
+ | |||
+ | Изменить жёсткость всех пружин | ||
+ | *'''changeSprings all->20''', где | ||
+ | |||
+ | 20 - новая жёсткость | ||
Создать стержень между частицами | Создать стержень между частицами | ||
− | *'''addStick | + | *'''addStick #2 #1''', где |
2, 1 - id частиц | 2, 1 - id частиц | ||
Строка 136: | Строка 171: | ||
*'''showTable type 1''' | *'''showTable type 1''' | ||
+ | |||
+ | *'''showTable type 2''' | ||
Спрятать сетку | Спрятать сетку | ||
*'''hideTable''' | *'''hideTable''' | ||
+ | |||
+ | Запустить симуляцию | ||
+ | *'''play''' | ||
+ | |||
+ | *'''§''' | ||
+ | |||
+ | *'''~''' | ||
+ | |||
+ | Остановить симуляцию | ||
+ | *'''stop''' | ||
+ | |||
+ | *'''§''' | ||
+ | |||
+ | *'''~''' | ||
+ | |||
+ | Промотать симуляцию | ||
+ | *'''step(100)''', где | ||
+ | |||
+ | 100 - число пропускаемых отрисовкой тиков | ||
+ | |||
+ | Исполнить внутренний метод | ||
+ | *'''execute nameMethod(params)''', где | ||
+ | |||
+ | nameMethod - название метода | ||
+ | params - сообщаемые параметры | ||
+ | |||
+ | Посмотреть историю запросов | ||
+ | *'''getHistory''' | ||
+ | |||
</small> | </small> | ||
{{конец цитаты}} | {{конец цитаты}} |
Версия 21:09, 26 мая 2015
А.М. Кривцов > Теоретическая механика > Курсовые проекты ТМ 2015 > Многочастичный симуляторКурсовой проект по Теоретической механике
Исполнитель: Старобинский Егор
Группа: 09 (23604)
Семестр: весна 2015
Содержание
Аннотация проекта
Формулировка задачи
Цель работы
Создание интернет-сайта, позволяющего пользователю моделировать многоточечную систему онлайн.
Решаемые задачи
- решение уравнения движения;
- визуализация.
Общие сведения по теме
Уравнение движения
Пусть мы наблюдаем тело в момент времени
.Хотим знать, где окажется тело через малое изменение времени -
.Рассмотрим базовый метод Верле :
, где
- позиция точки,
- равнодействующая всех сил, действующих на тело,
- масса тела,
- текущий момент времени,
- малое изменение времени.
Метод Верле позволяет вычислять траекторию по упрощённой схеме: зная предыдущее и текущее положения (
и соответственно) и мгновенное значение равнодействующей приложенных сил в текущем положении .Достоинства метода: самокоррекция и бóльшая точность по сравнению с численным методом Эйлера.
Язык реализации: JavaScript.
Визуализация
Язык рализации: pure SCSS.
Обработка событий: JavaScript.
Отказ от WebGL продиктован выбором методов оптимизации для возможности работы с тысячами частиц.
Решение
Элементы системы
- Частицы;
- Стержни и пружины[1];
- Стенки;
- Поле сил;
- Рабочее окно;
- Сетки разметки;
- Консоль;
- Плеер.
Возможности консоли
- Конфигурация начальной системы тел;
- Изменение системы в процессе работы ("на лету");
- Запуск алгоритмов анализа системы;
- Распознавание и вывод ошибок в пользовательских запросах и в исходном коде;
- Распознавание и вывод предупреждений в пользовательских запросах и в исходном коде;
- Подключение/отключение сеток разметки, в том числе с пользовательскими размерами ячейки;
- Тетрис.
Команды консоли
Координаты пишутся в декартовой системе (х,у), единица измерения - пиксели, орт х направлен от левого края к правому, орт у от верхнего края к нижнему. Пример: (0,100) - координаты точки, лежащей на левом краю экрана на 100 пикселей ниже верхней границы.
Очистить поле консоли
- clrscr
Отобразить статистику элементов системы и чилто тиков:
- getInfo
Создать частицу
- addPoint (100,100) (100,90) 80 5[2], где
(100,100) - текущие координаты
(100,90) - предыдущие координаты
80 - радиус частицы в пикселях
5 - масса частицы в у. е.
Задать вектор скорости (относительно начала координат)
- setVelocity #0 (10,10), где
0 - id частицы[3]
Задать массу
- setProps #0 'mass' 10, где
0 - id частицы
10 - новая масса
- setProps #0 'invmass' 0.1, где
0 - id частицы
10 - обратное значение новой массы
Создать пружину между частицами
- addSpring #0 #1 c, где
0, 1 - id частиц
c - жёсткость пружины
Изменить жёсткость пружины
- changeSpring #5 10, где
5 - id пружины
10 - новая жёсткость
Изменить жёсткость одинаковых пружин
- changeSprings 10->15, где
10 - текущая жёсткость
15 - новая жёсткость
Изменить жёсткость всех пружин
- changeSprings all->20, где
20 - новая жёсткость
Создать стержень между частицами
- addStick #2 #1, где
2, 1 - id частиц
Отключение гравитации
- gravy disable
Задать вектор ускорения свободного падения (относительно начала координат)
- gravy (0,10)
Отобразить сетку
- showTable type 0
- showTable type 1
- showTable type 2
Спрятать сетку
- hideTable
Запустить симуляцию
- play
- §
- ~
Остановить симуляцию
- stop
- §
- ~
Промотать симуляцию
- step(100), где
100 - число пропускаемых отрисовкой тиков
Исполнить внутренний метод
- execute nameMethod(params), где
nameMethod - название метода params - сообщаемые параметры
Посмотреть историю запросов
- getHistory
Возможности плеера
- Воспроизведение/пауза симуляции с заданным ;
- Скачок вперёд на кратное время;
- "Замедление времени"[4].
Обсуждение результатов и выводы
Скачать отчет:
Скачать презентацию:
Ссылки по теме
Опорный материал:
Thomas Jakobsen. "Advanced Character Physics", January 21, 2003. (перевод статьи )
См. также
Примечания
- ↑ Стержни рассчитываются на расстяжение/сжатие методом коррекции координат.
Действие пружин учитывается как действие силы упругости. - ↑ Без выделения жирным написаны необязательные параметры. Значения по умолчанию: предыдущие координаты совпадают с текущими, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения слева от него следует считать обязательными (во избежание путаницы при парсинге безразмерных величин в команде)
- ↑ Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли.
- ↑ При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управлятся через консоль.