КП: Многочастичный симулятор — различия между версиями
George (обсуждение | вклад) м (→Команды консоли) |
George (обсуждение | вклад) м (→Решение) |
||
Строка 95: | Строка 95: | ||
Создать частицу | Создать частицу | ||
− | *'''addPoint (100,100)''' ( | + | *'''addPoint (100,100)''' (0,10) 80 5<ref>Без выделения жирным написаны необязательные параметры. Значения по умолчанию: вектор скорости нулевой, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения слева от него следует считать обязательными (во избежание путаницы при парсинге безразмерных величин в команде)</ref>, где |
(100,100) - текущие координаты | (100,100) - текущие координаты | ||
− | ( | + | (0,10) - вектор скорости относительно начала координат |
80 - радиус частицы в пикселях | 80 - радиус частицы в пикселях | ||
Строка 109: | Строка 109: | ||
*'''setVelocity #0 (10,10)''', где | *'''setVelocity #0 (10,10)''', где | ||
− | 0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Может быть | + | 0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Может быть отображён в консоли нажатиями на кнопку "Get point's id" и на отображаемую частицу.</ref> |
Задать массу | Задать массу | ||
Строка 216: | Строка 216: | ||
</small> | </small> | ||
{{конец цитаты}} | {{конец цитаты}} | ||
+ | |||
+ | ===== Взаимодействие с частицами ===== | ||
+ | *'''Get point's id''' | ||
+ | |||
+ | После нажатия на кнопку, а затем на частицу выводит её id в консоль. | ||
+ | |||
+ | *'''Move point''' | ||
+ | |||
+ | После нажатия на кнопку, а затем на частицу закрепляет управление её положением за курсором мыши. | ||
+ | |||
+ | Дальнейшие нажатия на свободные участки поля переносят эту частицу в точку нажатия с сохранением вектора скорости | ||
+ | |||
+ | Для прекращения управления следует вновь нажать кнопку. | ||
+ | |||
===== Возможности плеера ===== | ===== Возможности плеера ===== |
Версия 21:18, 26 мая 2015
А.М. Кривцов > Теоретическая механика > Курсовые проекты ТМ 2015 > Многочастичный симуляторКурсовой проект по Теоретической механике
Исполнитель: Старобинский Егор
Группа: 09 (23604)
Семестр: весна 2015
Содержание
Аннотация проекта
Формулировка задачи
Цель работы
Создание интернет-сайта, позволяющего пользователю моделировать многоточечную систему онлайн.
Решаемые задачи
- решение уравнения движения;
- визуализация.
Общие сведения по теме
Уравнение движения
Пусть мы наблюдаем тело в момент времени
.Хотим знать, где окажется тело через малое изменение времени -
.Рассмотрим базовый метод Верле :
, где
- позиция точки,
- равнодействующая всех сил, действующих на тело,
- масса тела,
- текущий момент времени,
- малое изменение времени.
Метод Верле позволяет вычислять траекторию по упрощённой схеме: зная предыдущее и текущее положения (
и соответственно) и мгновенное значение равнодействующей приложенных сил в текущем положении .Достоинства метода: самокоррекция и бóльшая точность по сравнению с численным методом Эйлера.
Язык реализации: JavaScript.
Визуализация
Язык рализации: pure SCSS.
Обработка событий: JavaScript.
Отказ от WebGL продиктован выбором методов оптимизации для возможности работы с тысячами частиц.
Решение
Элементы системы
- Частицы;
- Стержни и пружины[1];
- Стенки;
- Поле сил;
- Рабочее окно;
- Сетки разметки;
- Консоль;
- Плеер.
Возможности консоли
- Конфигурация начальной системы тел;
- Изменение системы в процессе работы ("на лету");
- Запуск алгоритмов анализа системы;
- Распознавание и вывод ошибок в пользовательских запросах и в исходном коде;
- Распознавание и вывод предупреждений в пользовательских запросах и в исходном коде;
- Подключение/отключение сеток разметки, в том числе с пользовательскими размерами ячейки;
- Тетрис.
Команды консоли
Координаты пишутся в декартовой системе (х,у), единица измерения - пиксели, орт х направлен от левого края к правому, орт у от верхнего края к нижнему. Пример: (0,100) - координаты точки, лежащей на левом краю экрана на 100 пикселей ниже верхней границы.
Очистить поле консоли
- clrscr
Отобразить статистику элементов системы и чилто тиков:
- getInfo
Создать частицу
- addPoint (100,100) (0,10) 80 5[2], где
(100,100) - текущие координаты
(0,10) - вектор скорости относительно начала координат
80 - радиус частицы в пикселях
5 - масса частицы в у. е.
Задать вектор скорости (относительно начала координат)
- setVelocity #0 (10,10), где
0 - id частицы[3]
Задать массу
- setProps #0 'mass' 10, где
0 - id частицы
10 - новая масса
- setProps #0 'invmass' 0.1, где
0 - id частицы
10 - обратное значение новой массы
Задать радиус
- setProps #0 'radius' 100, где
0 - id частицы
100 - радиус частицы
Создать пружину между частицами
- 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
Взаимодействие с частицами
- Get point's id
После нажатия на кнопку, а затем на частицу выводит её id в консоль.
- Move point
После нажатия на кнопку, а затем на частицу закрепляет управление её положением за курсором мыши.
Дальнейшие нажатия на свободные участки поля переносят эту частицу в точку нажатия с сохранением вектора скорости
Для прекращения управления следует вновь нажать кнопку.
Возможности плеера
- Воспроизведение/пауза симуляции с заданным ;
- Скачок вперёд на кратное время;
- "Замедление времени"[4].
Обсуждение результатов и выводы
Скачать отчет:
Скачать презентацию:
Ссылки по теме
Опорный материал:
Thomas Jakobsen. "Advanced Character Physics", January 21, 2003. (перевод статьи )
См. также
Примечания
- ↑ Стержни рассчитываются на расстяжение/сжатие методом коррекции координат.
Действие пружин учитывается как действие силы упругости. - ↑ Без выделения жирным написаны необязательные параметры. Значения по умолчанию: вектор скорости нулевой, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения слева от него следует считать обязательными (во избежание путаницы при парсинге безразмерных величин в команде)
- ↑ Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Может быть отображён в консоли нажатиями на кнопку "Get point's id" и на отображаемую частицу.
- ↑ При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управлятся через консоль.