Редактирование: КП: Многочастичный симулятор
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 6: | Строка 6: | ||
'''Исполнитель:''' [[Старобинский Егор]] | '''Исполнитель:''' [[Старобинский Егор]] | ||
− | '''Группа:''' [[Группа 09|09]] | + | '''Группа:''' [[Группа 09|09]] (23604) |
'''Семестр:''' весна 2015 | '''Семестр:''' весна 2015 | ||
== Аннотация проекта == | == Аннотация проекта == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Формулировка задачи == | == Формулировка задачи == | ||
− | |||
===== Цель работы ===== | ===== Цель работы ===== | ||
Создание интернет-сайта, позволяющего пользователю моделировать многоточечную систему онлайн. | Создание интернет-сайта, позволяющего пользователю моделировать многоточечную систему онлайн. | ||
Строка 68: | Строка 47: | ||
Язык реализации: JavaScript. | Язык реализации: JavaScript. | ||
− | |||
===== Визуализация ===== | ===== Визуализация ===== | ||
Строка 74: | Строка 52: | ||
Обработка событий: JavaScript. | Обработка событий: JavaScript. | ||
− | |||
− | |||
Отказ от WebGL продиктован выбором методов оптимизации для возможности работы с тысячами частиц. | Отказ от WebGL продиктован выбором методов оптимизации для возможности работы с тысячами частиц. | ||
== Решение == | == Решение == | ||
− | |||
− | |||
===== Результат ===== | ===== Результат ===== | ||
<center> | <center> | ||
− | {{#widget:Iframe|url= | + | {{#widget:Iframe|url=http://cl49743.tmweb.ru/node/phen/|width=960|height:540|border=0}} |
− | <big>[// | + | <big>[http://cl49743.tmweb.ru/node/phen/ Страница решения]</big> |
</center> | </center> | ||
Строка 94: | Строка 68: | ||
[[File:iPhone_image_2015-4-13-1431495673979_0.jpg|thumb|Нахождение периода в простом движении]] | [[File:iPhone_image_2015-4-13-1431495673979_0.jpg|thumb|Нахождение периода в простом движении]] | ||
− | |||
===== Элементы системы ===== | ===== Элементы системы ===== | ||
* Частицы; | * Частицы; | ||
Строка 108: | Строка 81: | ||
[[File:iPhone_image_2015-4-13-1431495674173_2.jpg|thumb|Пример вывода консоли]] | [[File:iPhone_image_2015-4-13-1431495674173_2.jpg|thumb|Пример вывода консоли]] | ||
− | |||
===== Возможности консоли ===== | ===== Возможности консоли ===== | ||
Строка 118: | Строка 90: | ||
* Подключение/отключение сеток разметки, в том числе с пользовательскими размерами ячейки; | * Подключение/отключение сеток разметки, в том числе с пользовательскими размерами ячейки; | ||
* Тетрис. | * Тетрис. | ||
− | |||
===== Команды консоли ===== | ===== Команды консоли ===== | ||
Строка 125: | Строка 96: | ||
Консоль выводит каждое сообщение как одну строку. Если доступной длины строки не хватает, сообщение обрезается. Для отображения полной версии сообщения необходимо кликнуть по нему мышью. | Консоль выводит каждое сообщение как одну строку. Если доступной длины строки не хватает, сообщение обрезается. Для отображения полной версии сообщения необходимо кликнуть по нему мышью. | ||
+ | {{начало цитаты}} | ||
+ | '''Основные запросы''' | ||
− | < | + | <small> |
− | |||
− | |||
− | |||
Очистить поле консоли | Очистить поле консоли | ||
Строка 135: | Строка 105: | ||
− | Отобразить статистику элементов системы и | + | Отобразить статистику элементов системы и чилто тиков: |
* '''getInfo''' | * '''getInfo''' | ||
Строка 157: | Строка 127: | ||
* '''setVelocity #0 (10,10)''', где | * '''setVelocity #0 (10,10)''', где | ||
− | 0 - id частицы<ref name="pointsId">Идентификационный номер элемента в системе. Генерируется последовательно, начиная с | + | 0 - id частицы<ref name="pointsId">Идентификационный номер элемента в системе. Генерируется последовательно, начиная с единицы, для стенок, стержней, пружин и частиц. Для частиц значение id можно найти нажатием сначала на кнопку "Get point's id", а затем на частицу: тогда Id отобразится в консоли.</ref> |
− | |||
− | |||
Строка 175: | Строка 143: | ||
Задать массу | Задать массу | ||
− | * ''' | + | * '''setProps #0 mass 10''', где |
0 - id частицы<ref name="pointsId" /> | 0 - id частицы<ref name="pointsId" /> | ||
− | 10 - новая масса | + | 10 - новая масса |
− | * ''' | + | * '''setProps #0 invmass 0.1''', где |
0 - id частицы<ref name="pointsId" /> | 0 - id частицы<ref name="pointsId" /> | ||
Строка 190: | Строка 158: | ||
Задать радиус | Задать радиус | ||
− | * ''' | + | * '''setProps #0 radius 100''', где |
0 - id частицы<ref name="pointsId" /> | 0 - id частицы<ref name="pointsId" /> | ||
− | 100 - радиус частицы | + | 100 - радиус частицы |
Строка 203: | Строка 171: | ||
0, 1 - id частиц<ref name="pointsId" /> | 0, 1 - id частиц<ref name="pointsId" /> | ||
− | 50 - жёсткость пружины | + | 50 - жёсткость пружины |
Строка 211: | Строка 179: | ||
5 - id пружины<ref name="pointsId" /> | 5 - id пружины<ref name="pointsId" /> | ||
− | 10 - новая жёсткость | + | 10 - новая жёсткость |
Строка 217: | Строка 185: | ||
* '''changeSprings 10->15''', где | * '''changeSprings 10->15''', где | ||
− | 10 - текущая жёсткость | + | 10 - текущая жёсткость |
− | 15 - новая жёсткость | + | 15 - новая жёсткость |
Строка 225: | Строка 193: | ||
* '''changeSprings all->20''', где | * '''changeSprings all->20''', где | ||
− | 20 - новая жёсткость | + | 20 - новая жёсткость |
Строка 237: | Строка 205: | ||
Отключение гравитации | Отключение гравитации | ||
− | * ''' | + | * '''gravy disable''' |
Задать вектор ускорения свободного падения (относительно начала координат) | Задать вектор ускорения свободного падения (относительно начала координат) | ||
− | * ''' | + | * '''gravy (0,10)''' |
− | Отобразить сетку | + | Отобразить сетку |
* '''showGrid type 0''' | * '''showGrid type 0''' | ||
− | |||
− | |||
* '''showGrid type 1''' | * '''showGrid type 1''' | ||
− | |||
− | |||
* '''showGrid type 2''' | * '''showGrid type 2''' | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Строка 303: | Строка 259: | ||
commandOne, commandTwo - команды консоли, могут также состоять из объединённых команд | commandOne, commandTwo - команды консоли, могут также состоять из объединённых команд | ||
+ | </small> | ||
{{конец цитаты}} | {{конец цитаты}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===== Кнопки интерфейса ===== | ===== Кнопки интерфейса ===== | ||
Строка 316: | Строка 266: | ||
После нажатия на кнопку, а затем на частицу выводит id последней в консоль. | После нажатия на кнопку, а затем на частицу выводит id последней в консоль. | ||
− | |||
* Кнопка '''Move point'''<ref name="workWithVisualisation" /> | * Кнопка '''Move point'''<ref name="workWithVisualisation" /> | ||
Строка 322: | Строка 271: | ||
Эквивалентна команде консоли movePoint без флага saveV. | Эквивалентна команде консоли movePoint без флага saveV. | ||
− | После нажатия на кнопку, а затем на частицу закрепляет управление положением | + | После нажатия на кнопку, а затем на частицу закрепляет управление положением последним за курсором мыши. |
Дальнейшие нажатия на свободные участки поля переносят эту частицу в точку нажатия, при этом её скорость считается нулевой. | Дальнейшие нажатия на свободные участки поля переносят эту частицу в точку нажатия, при этом её скорость считается нулевой. | ||
− | Для прекращения управления следует вновь нажать | + | Для прекращения управления следует вновь нажать кнопку. |
− | |||
* Клавиша клавиатуры '''~''' (также '''`''', '''ё''', '''Ё''') | * Клавиша клавиатуры '''~''' (также '''`''', '''ё''', '''Ё''') | ||
− | Эквивалентна командам консоли play/stop и | + | Эквивалентна командам консоли play/stop и крайней левой кнопке плеера. |
− | |||
* Кнопки плеера | * Кнопки плеера | ||
− | + | Слева направо: | |
− | + | Воспроизведение/остановка симуляции (эквивалентно командам консоли play/step), переход на тик вперёд (эквивалентно команде консоли step(1))переход на 50 тиков вперёд (эквивалентно команде консоли step(50)), переход на 100 тиков вперёд (эквивалентно команде консоли step(100)). | |
− | + | ===== Возможности плеера ===== | |
− | + | * Воспроизведение/пауза симуляции с заданным <math>\Delta t</math>; | |
− | + | * Скачок вперёд на кратное <math>\Delta t</math> время; | |
+ | * "Замедление времени"<ref>При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управлятся через консоль.</ref>. | ||
===== Пример системы ===== | ===== Пример системы ===== | ||
Строка 383: | Строка 331: | ||
== Выдержки кода решения == | == Выдержки кода решения == | ||
<div class="mw-collapsible mw-collapsed" style="width:100%" > | <div class="mw-collapsible mw-collapsed" style="width:100%" > | ||
− | '''Исходный код некоторых файлов | + | '''Исходный код некоторых файлов:''' |
<div class="mw-collapsible-content"> | <div class="mw-collapsible-content"> | ||
Файл '''"point.js"''' | Файл '''"point.js"''' | ||
Строка 389: | Строка 337: | ||
function Point(mass, radius, coorXY, oldCoorXY, isExpToPot) | function Point(mass, radius, coorXY, oldCoorXY, isExpToPot) | ||
{ | { | ||
− | + | this.mass = mass; | |
this.invmass = 1 / mass; | this.invmass = 1 / mass; | ||
this.radius = radius; | this.radius = radius; | ||
Строка 1157: | Строка 1105: | ||
-ms-user-select: none; | -ms-user-select: none; | ||
-o-user-select: none; | -o-user-select: none; | ||
− | user-select: | + | user-select: none; |
} | } | ||
#screen{ | #screen{ | ||
Строка 1224: | Строка 1172: | ||
width: 2px; | width: 2px; | ||
position:absolute; | position:absolute; | ||
− | -webkit-transform-origin: | + | -webkit-transform-origin: 50% 0; |
-khtml-transform-origin: 50% 0; | -khtml-transform-origin: 50% 0; | ||
-moz-transform-origin: 50% 0; | -moz-transform-origin: 50% 0; | ||
Строка 1270: | Строка 1218: | ||
padding: 15px; | padding: 15px; | ||
-webkit-transition: all 400ms; | -webkit-transition: all 400ms; | ||
− | -khtml-transition: | + | -khtml-transition: all 400ms; |
-moz-transition: all 400ms; | -moz-transition: all 400ms; | ||
-o-transition: all 400ms; | -o-transition: all 400ms; | ||
Строка 1436: | Строка 1384: | ||
<title>Phen v2.0 a</title> | <title>Phen v2.0 a</title> | ||
<link rel="stylesheet" href="./phen.css"> | <link rel="stylesheet" href="./phen.css"> | ||
− | + | <script type="text/javascript" src="./jquery-2.1.3.min.js"></script> | |
− | + | <script type="text/javascript" src="./jquery-css-transform.js"></script> | |
− | + | <script type="text/javascript" src="./point.js"></script> | |
− | + | <script type="text/javascript" src="./spring.js"></script> | |
− | + | <script type="text/javascript" src="./stick.js"></script> | |
− | + | <script type="text/javascript" src="./func.js"></script> | |
<script type="text/javascript" src="./renderer.js"></script> | <script type="text/javascript" src="./renderer.js"></script> | ||
<script type="text/javascript" src="./wall.js"></script> | <script type="text/javascript" src="./wall.js"></script> | ||
<script type="text/javascript" src="./phen.js"></script> | <script type="text/javascript" src="./phen.js"></script> | ||
− | + | <script type="text/javascript" src="./parser.js"></script> | |
<script type="text/javascript" src="./console.js"></script> | <script type="text/javascript" src="./console.js"></script> | ||
<script type="text/javascript" src="./player.js"></script> | <script type="text/javascript" src="./player.js"></script> | ||
<script type="text/javascript" src="./cycle.js"></script> | <script type="text/javascript" src="./cycle.js"></script> | ||
− | + | <script type="text/javascript" src="./clean.js"></script> | |
</head> | </head> | ||
<body> | <body> | ||
Строка 1461: | Строка 1409: | ||
</div> | </div> | ||
<div id="consoleWindow" class="show"> | <div id="consoleWindow" class="show"> | ||
− | + | <div id="consoleInput"> | |
− | + | <input id="console" type="text" autofocus="autofocus"> | |
− | + | <input id="consoleBtn" type="button" value="Enter"> | |
− | + | </div> | |
− | + | <div id="consoleLog"> | |
− | + | </div> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</div> | </div> | ||
+ | <div id="controls" class="show" type="0"> | ||
+ | <div id="playerBtns"> | ||
+ | <span id="stop"></span> | ||
+ | <span id="stepMin"></span> | ||
+ | <span id="stepMid"></span> | ||
+ | <span id="stepMax"></span> | ||
+ | </div> | ||
+ | </div> | ||
</body> | </body> | ||
</html> | </html> | ||
Строка 1481: | Строка 1429: | ||
</div> | </div> | ||
− | + | == Обсуждение результатов и выводы == | |
− | + | <br> | |
− | + | Скачать отчет: | |
− | + | <br> | |
− | + | Скачать презентацию: | |
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Ссылки по теме == | == Ссылки по теме == | ||
− | T | + | T, Jakobsen. "Advanced Character Physics", 2003. ([http://dkhramov.dp.ua/uploads/Comp/Jakobsen/jakobsen.pdf перевод статьи <nowiki></nowiki>]) |
− | Л. Ландау, Е. Лифшиц | + | Л. Ландау, Е. Лифшиц, "Теоретическая физика", том первый, "Механика", 2001. |
− | А | + | А, Смирнов. "Курсовой проект: молекула углекислого газа", 2015. ([[КП: Молекула углекислого газа|страница проекта]]) |
== См. также == | == См. также == |