КП: Многочастичный симулятор — различия между версиями
(→Решение) |
(→Команды консоли) |
||
Строка 81: | Строка 81: | ||
===== Команды консоли ===== | ===== Команды консоли ===== | ||
− | Координаты пишутся в декартовой системе (х,у), единица измерения - пиксели, орт х направлен от левого края к | + | Координаты пишутся в декартовой системе (х,у), единица измерения - пиксели, орт х направлен от левого края к правому, орт у от верхнего края к нижнему. Пример: (0,100) - координаты точки, лежащей на левом краю экрана на 100 пикселей ниже верхней границы. |
{{начало цитаты}} | {{начало цитаты}} | ||
Строка 89: | Строка 89: | ||
*'''clrscr''' | *'''clrscr''' | ||
− | Отобразить статистику элементов системы и | + | Отобразить статистику элементов системы и чилто тиков: |
*'''getInfo''' | *'''getInfo''' | ||
Строка 95: | Строка 95: | ||
Создать частицу | Создать частицу | ||
− | *'''addPoint (100,100)''' (100,90) 80 5<ref>Без выделения жирным написаны необязательные параметры. Значения по умолчанию: предыдущие координаты совпадают с текущими, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения | + | *'''addPoint (100,100)''' (100,90) 80 5<ref>Без выделения жирным написаны необязательные параметры. Значения по умолчанию: предыдущие координаты совпадают с текущими, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения слева от него следует считать обязательными (во избежание путаницы при парсинге безразмерных величин в команде)</ref>, где |
(100,100) - текущие координаты | (100,100) - текущие координаты | ||
Строка 109: | Строка 109: | ||
*'''setVelocity 0 (10,10)''', где | *'''setVelocity 0 (10,10)''', где | ||
− | 0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли | + | 0 - id частицы<ref>Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли. </ref> |
Создать пружину между частицами | Создать пружину между частицами |
Версия 11:07, 20 мая 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]
Создать пружину между частицами
- addSpring -0 d -1 d, где
0, 1 - id частиц
Создать стержень между частицами
- addStick -2 d -1 d, где
2, 1 - id частиц
Отключение гравитации
- gravy disable
Задать вектор ускорения свободного падения (относительно начала координат)
- gravy (0,10)
Отобразить сетку
- showTable type 0
- showTable type 1
Спрятать сетку
- hideTable
Возможности плеера
- Воспроизведение/пауза симуляции с заданным ;
- Скачок вперёд на кратное время;
- "Замедление времени"[4].
Обсуждение результатов и выводы
Скачать отчет:
Скачать презентацию:
Ссылки по теме
Опорный материал:
Thomas Jakobsen. "Advanced Character Physics", January 21, 2003. (перевод статьи )
См. также
Примечания
- ↑ Стержни рассчитываются на расстяжение/сжатие методом коррекции координат.
Действие пружин учитывается как действие силы упругости. - ↑ Без выделения жирным написаны необязательные параметры. Значения по умолчанию: предыдущие координаты совпадают с текущими, радиус равен 50 пикселям, масса равна 5 у. е. При желании указать необязательный параметр все значения слева от него следует считать обязательными (во избежание путаницы при парсинге безразмерных величин в команде)
- ↑ Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Отображается в консоли.
- ↑ При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управлятся через консоль.