Редактирование: КП: Многочастичный симулятор

Перейти к: навигация, поиск

Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 6: Строка 6:
 
'''Исполнитель:''' [[Старобинский Егор]]
 
'''Исполнитель:''' [[Старобинский Егор]]
  
'''Группа:''' [[Группа 09|09]]
+
'''Группа:''' [[Группа 09|09]] (23604)
  
 
'''Семестр:''' весна 2015
 
'''Семестр:''' весна 2015
Строка 84: Строка 84:
 
===== Результат =====
 
===== Результат =====
 
<center>
 
<center>
{{#widget:Iframe|url=https://ailurus.ru/stands/phen/|width=960|height:540|border=0}}
+
{{#widget:Iframe|url=http://cl49743.tmweb.ru/node/phen/|width=960|height:540|border=0}}
  
<big>[//ailurus.ru/stands/phen/ Страница решения]</big>
+
<big>[http://cl49743.tmweb.ru/node/phen/ Страница решения]</big>
 
</center>
 
</center>
  
Строка 94: Строка 94:
  
 
[[File:iPhone_image_2015-4-13-1431495673979_0.jpg|thumb|Нахождение периода в простом движении]]
 
[[File:iPhone_image_2015-4-13-1431495673979_0.jpg|thumb|Нахождение периода в простом движении]]
 +
  
 
===== Элементы системы =====
 
===== Элементы системы =====
Строка 310: Строка 311:
 
* Воспроизведение/пауза симуляции с заданным <math>\Delta t</math>;  
 
* Воспроизведение/пауза симуляции с заданным <math>\Delta t</math>;  
 
* Скачок вперёд на кратное <math>\Delta t</math> время;
 
* Скачок вперёд на кратное <math>\Delta t</math> время;
* "Замедление времени"<ref>При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управляется через консоль.</ref>.
+
* "Замедление времени"<ref>При малой производительности клиента уменьшаем число отрисовок в единицу времени для сохранения гладкости анимации. Управлятся через консоль.</ref>.
 +
 
  
 
===== Кнопки интерфейса =====
 
===== Кнопки интерфейса =====
Строка 1487: Строка 1489:
 
Отличие от семейства версий '''1.*''' в полностью переписанной логике проекта для оптимизации вычислений и соблюдения принципов OOP JS.
 
Отличие от семейства версий '''1.*''' в полностью переписанной логике проекта для оптимизации вычислений и соблюдения принципов OOP JS.
  
<div class="mw-collapsible mw-collapsed" style="width:100%" >
+
== Презентации проекта ==
'''Разбор кода файла point.js'''
+
Общая презентация симулятора (12 страниц)
<div class="mw-collapsible-content">
 
Файл '''"point.js"'''
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
function Point(mass, radius, coorXY, oldCoorXY, isExpToPot)
 
{
 
    this.mass = mass;
 
    this.invmass = 1 / mass;
 
    this.radius = radius;
 
    this.coor = coorXY;
 
    this.oldCoor = oldCoorXY || coorXY;
 
    this.id = getId();
 
    this.type = 'point';
 
    this.isExpToPot = isExpToPot || false;
 
   
 
// log
 
    console.log('Create: '+this.toString());
 
}
 
  
 +
[[File:MultiparticleSimulator.pdf]]
  
Point.prototype.checkCoor = function(){
+
Подробная презентация физического движка в составе симулятора (55 страниц)
    if (this.coor.isNaN())
 
    {
 
        console.error('Coor is NaN: ' + this);
 
        player.stop();
 
    }
 
    else
 
    {
 
        if (this.oldCoor.isNaN())
 
        {
 
            console.warning('OldCoor is NaN: ' + this);
 
            this.oldCoor = new Coor(this.coor);
 
        }
 
        else
 
        {
 
            return ;
 
        }
 
    }
 
}
 
 
 
Point.prototype.toString = function(type){
 
    if (type === 'full')
 
    {
 
        return JSON.stringify(this, [ 
 
                                        'type',
 
                                        'id',
 
                                        'coor',
 
                                        'mass_',
 
                                        'radius_',
 
                                        'x',
 
                                        'y',
 
                                        'begin',
 
                                        'end'
 
                                ], 4)
 
    }
 
    else
 
    {
 
        return JSON.stringify(this, [ 
 
                                        'type',
 
                                        'id',
 
                                        'coor',
 
                                        'x',
 
                                        'y',
 
                                        'begin',
 
                                        'end'
 
                                ], 4)
 
    }
 
}
 
 
 
Point.prototype.move = function(coorXY){
 
var delta = minusCoor(this.coor, this.oldCoor);
 
    this.coor = coorXY;
 
    this.oldCoor = minusCoor(coorXY, delta);
 
// log
 
    console.log('Move: '+this.toString());
 
}
 
 
 
Point.prototype.moveEase = function(coorXY){
 
    this.coor = coorXY;
 
    this.oldCoor = coorXY;
 
// log
 
    console.log('Move: '+this.toString());
 
}
 
</syntaxhighlight>
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="3" enclose="div">this.mass = mass;</syntaxhighlight>
 
 
 
Сообщаем нашей частице массу, равную mass.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="4" enclose="div">this.invmass = 1 / mass;</syntaxhighlight>
 
 
 
Вводим обратную массу, равную 1/mass. В дальнейшем работаем именно с обратным значением массы, так как это позволит вводить  “бесконечно тяжёлые” частицы (значение invmass можно задать отдельно впоследствие).
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="5" enclose="div">this.radius = radius;</syntaxhighlight>
 
 
 
Задаём радиус, равный radius. Измеряется в пикселях.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="6" enclose="div">this.coor = coorXY;</syntaxhighlight>
 
 
 
Задаём текущие координаты значениями coorXY.x и coorXY.y.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="7" enclose="div">this.oldCoor = oldCoorXY || coorXY;</syntaxhighlight>
 
 
 
Если были заданы предыдущие координаты (oldCoor.x и oldCoor.y), то записываем их. Иначе записываем текущие координаты, тогда частица будет обладать нулевым вектором скорости
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="8" enclose="div">this.id = getId();</syntaxhighlight>
 
 
 
Генерируем уникальный номер для частицы.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="9" enclose="div">this.type = 'point';</syntaxhighlight>
 
 
 
Указываем тип элемента как “point”, чтобы обработчик отличал частицу от других объектов.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="10" enclose="div">this.isExpToPot = isExpToPot || false;</syntaxhighlight>
 
 
 
Сообщаем, должна ли участвовать в потенциальном парном взаимодействии. Да - если isExpToPot равняется true, нет - во всех прочих случаях.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="13" enclose="div">console.log('Create: ‘+this.toString());</syntaxhighlight>
 
 
 
Выводим в консоль подробную информацию о созданной частице.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="17" enclose="div">Point.prototype.checkCoor</syntaxhighlight>
 
 
 
Метод проверки значений координат положений частицы. Если текущее положение частицы не может быть определено (не верный запрос, статически неопределимая система и пр.), останавливаем симуляцию и выводим в консоль ошибку. Если не удаётся определить значения координат предыдущего положения (симуляция запущена пользователем после получения ошибки в текущих координатах частицы и пр.), выдаём предупреждение, используем координаты текущего положения также и как координаты предыдущего.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="37" enclose="div">Point.prototype.toString</syntaxhighlight>
 
 
 
Метод, собирающий информацию о частице и выдающий её в удобном виде.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="66" enclose="div">Point.prototype.move</syntaxhighlight>
 
 
 
Метод перемещения частицы в указанные координаты. Вектор скорости сохраняется, в консоль записывается информация о перемещении.
 
 
 
 
 
<syntaxhighlight lang="javascript" line start="74" enclose="div">Point.prototype.moveEase</syntaxhighlight>
 
 
 
Другой метод перемещения частицы в указанные координаты. Вектор скорости зануляется, в консоль записывается информация о перемещении.
 
</div>
 
  
== Сопроводительная информация ==
+
[[File:PhysicsEngine.pdf]]
{| class="wikitable" style="text-align:center; width: 100%;"
 
|-
 
! Общая презентация <br>симулятора
 
! Подробная презентация <br> физического движка <br>в составе симулятора
 
! Отчёт
 
|-
 
| [[File:MultiparticleSimulator.pdf]]
 
| [[File:PhysicsEngine.pdf]]
 
| [[File:MultiparticleSimulatorReport.pdf]]
 
|-
 
| 12 слайдов
 
| 55 слайдов
 
| 21 страница
 
|}
 
  
 
== Ссылки по теме ==
 
== Ссылки по теме ==
Вам запрещено изменять защиту статьи. Edit Создать редактором

Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии Public Domain (см. Department of Theoretical and Applied Mechanics:Авторские права). Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого.
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!

To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:

Отменить | Справка по редактированию  (в новом окне)