Редактирование: Молекулярная динамика

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
== Описание ==
+
== Описание ==<br />
 
Данная работа посвящена визуализации движения частиц в замкнутом объеме. Цель проекта заключается в изучении основных принципов создания рабочей модели взаимодействия. Объект исследования – процесс использования языков программирования, а также физическая теория в области динамики. Предмет исследования – программные инструменты языков JavaScript и HTML.<br />
 
Данная работа посвящена визуализации движения частиц в замкнутом объеме. Цель проекта заключается в изучении основных принципов создания рабочей модели взаимодействия. Объект исследования – процесс использования языков программирования, а также физическая теория в области динамики. Предмет исследования – программные инструменты языков JavaScript и HTML.<br />
Исполнители :[http://tm.spbstu.ru/%D0%96%D1%83%D0%BA%D0%B8%D0%BD_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80 Жукин Александр],  
+
Исполнители : http://tm.spbstu.ru/?title=%D0%9C%D0%BE%D0%BB%D0%B5%D0%BA%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D0%BA%D0%B0&action=edit[http://tm.spbstu.ru/%D0%96%D1%83%D0%BA%D0%B8%D0%BD_%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80 Жукин Александр],  
 
[http://tm.spbstu.ru/%D0%9B%D0%B8%D1%82%D0%B2%D0%B8%D0%BD%D0%BE%D0%B2%D0%B0_%D0%AF%D1%80%D0%BE%D1%81%D0%BB%D0%B0%D0%B2%D0%B0 Литвинова Ярослава]
 
[http://tm.spbstu.ru/%D0%9B%D0%B8%D1%82%D0%B2%D0%B8%D0%BD%D0%BE%D0%B2%D0%B0_%D0%AF%D1%80%D0%BE%D1%81%D0%BB%D0%B0%D0%B2%D0%B0 Литвинова Ярослава]
  
Строка 13: Строка 13:
  
 
== Визуализация ==
 
== Визуализация ==
{{#widget:Iframe | url= http://tm.spbstu.ru/htmlets/js2020/Litvinova/particleshtml.html |width=600 | height=1250| border=0}}
+
{{#widget:Iframe | url-http://tm.spbstu.ru/htmlets/js2020/Litvinova/particleshtml.html |width=600 | height=1000 | border=0}}
  
 
==Код программы==
 
==Код программы==
Код программы:
 
<div class="mw-collapsible mw-collapsed">
 
'''JS:''' <div class="mw-collapsible-content">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<br />
 
    window.addEventListener('load',main,false)
 
    function main(){
 
    var N = document.getElementById("num").value;
 
    Num = document.getElementById("num").value;
 
    my = document.getElementById("my");
 
    my.innerHTML =Num + " частиц";
 
    var animation = 0;
 
    var za = 0;
 
    var ctx2 = canvasex2.getContext('2d');
 
    var cplot = canvasex1.getContext('2d');
 
    var cpl = canvasex3.getContext('2d');
 
    var w = canvasex1.width;
 
    var h = canvasex1.height;
 
    var particles = [];
 
    var t_max = 0;
 
    var E=[];
 
    var Ep=[];
 
    una.onclick= function una(){
 
    animation = 0;
 
    }
 
    start.onclick= function start(){
 
    var D = document.getElementById("D").value;  //энергия связи
 
    var beta = document.getElementById("b").value;  //вязкость
 
    animation=1;
 
    za += 1;
 
    var l = canvasex2.height;
 
    var a = 30; //равновесное расстояние
 
    var m = 1;
 
    var rad = 10;
 
    var dt=1/60;
 
 
    function Particle(x,y,vx,vy){
 
    var that=this;
 
    this.x=x;
 
    this.y=y;
 
    this.vx=vx;
 
    this.vy=vy;
 
    this.info = function (){
 
    console.log('Position: ('+that.x+','+that.y+')\nVelocity: ('+that.vx+','+that.vy+')')
 
    }
 
    this.move=function(){
 
    if ((that.x-rad)<0||(that.x+rad)>l){
 
    that.vx*=-1;
 
    }
 
    if ((that.y-rad)<0||(that.y+rad)>l){
 
    that.vy*=-1;
 
    }
 
    that.x+=that.vx*dt;
 
    that.y+=that.vy*dt;
 
    }
 
    this.draw = function(){
 
    ctx2.beginPath();
 
    ctx2.arc(that.x,that.y,rad,0,2*Math.PI);
 
    ctx2.fillStyle = '#9999FF';
 
    ctx2.fill();
 
    }
 
    }
 
 
    if (za==1){ // создание частиц
 
    for(var i=0;i<N;i++){
 
    var fi= Math.random()*2*Math.PI;
 
    particles.push(
 
    new Particle(
 
      50+Math.random()*400,
 
      50+Math.random()*400,
 
      20*Math.cos(fi),
 
      20*Math.sin(fi),
 
        )
 
        );
 
    if (i!=0){
 
      for (var z = 1;i-z>=0;z++)
 
        {
 
          if (Math.sqrt((particles[i].x-particles[i-z].x)*(particles[i].x-particles[i-z].x)+(particles[i].y-particles[i-z].y)*(particles[i].y-particles[i-z].y))<a)
 
            { particles.length = particles.length-1;
 
                    i = i-1;
 
            }
 
        }
 
        }
 
      particles[i].draw();
 
      }
 
    }
 
 
    function phys(){
 
        var ep = 0;
 
      for(var i=0;i<N;i++){
 
          particles[i].move();
 
          for(var j=0;j<N;j++){;
 
            if(i!=j){
 
                var F = 0;
 
                var rx = particles[j].x-particles[i].x;
 
                var ry = particles[j].y-particles[i].y;
 
                var r = Math.sqrt(Math.pow(rx,2)+Math.pow(ry,2));
 
                var K = Math.pow(1-Math.pow((r*r-1.21*a*a)/(16-1.21)/a/a,2),2);
 
                if (r<1.1*a){  K = 1;  }
 
                if (r>4*a){    K = 0;  }
 
                if (r<15){  r = 15;  }
 
                F = K*(12*D/a)*(Math.pow((a/r),13)-Math.pow((a/r),7));
 
                ep+=D*(Math.pow((a/r),12)-2*Math.pow((a/r),6));
 
                particles[i].vx = (particles[i].vx*Math.exp(-beta*dt) - (rx/r)*F*dt/m);
 
                particles[i].vy = (particles[i].vy*Math.exp(-beta*dt) - (ry/r)*F*dt/m);
 
                  }
 
                }
 
            }
 
        for (var i=0;i<N;i++){
 
              particles[i].x = particles[i].x+particles[i].vx*dt;
 
              particles[i].y = particles[i].y+particles[i].vy*dt;
 
            }
 
        Ep.push(ep);
 
        var e = 0;
 
        for (var ii=0;ii<N;ii++){
 
              e+=(particles[ii].vx*particles[ii].vx+particles[ii].vy*particles[ii].vy)/2;
 
            }
 
        E.push(e);
 
        t_max+=dt;
 
      }
 
 
    function draw(){
 
        ctx2.clearRect(0,0,500,500);
 
        for(var i=0;i<N;i++){
 
        particles[i].draw();}
 
        var Ep_scale =(h-20)/Math.max.apply(null,Ep);
 
        var E_scale =(h-20)/Math.max.apply(null,E);
 
        var t_scale= w/t_max;
 
        cplot.beginPath();
 
        cpl.beginPath();
 
        for (var i =0; i<E.length-1; i++){
 
            cplot.clearRect(0,0,w,h);
 
            cpl.clearRect(0,0,w,h);
 
            cplot.moveTo(dt*i*t_scale,3*h/4-Ep[i]*(Ep_scale));
 
            cplot.lineTo(dt*(i+1)*t_scale, 3*h/4-Ep[i+1]*(Ep_scale));
 
            cplot.font = "28px calibri";
 
            cplot.strokeText("Ep="+Ep[i].toFixed(1),20,280)
 
            cpl.moveTo(dt*i*t_scale,h-E[i]*(E_scale));
 
            cpl.lineTo(dt*(i+1)*t_scale, h-E[i+1]*(E_scale));
 
            cpl.font = "28px calibri";
 
            cpl.strokeText("Ek="+E[i].toFixed(1),20,280)
 
            cplot.stroke();
 
            cpl.stroke();
 
            }
 
        }
 
 
    function control(){
 
        if (animation!=0){
 
            phys();
 
            draw();
 
          }
 
        }
 
    setInterval(control,1000*dt);
 
    }
 
  }
 
</syntaxhighlight>
 
</div>
 
<div class="mw-collapsible mw-collapsed">
 
'''HTML:''' <div class="mw-collapsible-content">
 
<syntaxhighlight lang="javascript" line start="1" enclose="div">
 
<!DOCTYPE html>
 
<html>
 
<head>
 
<title>Particles</title>
 
<script src='particles.js'></script>
 
<style>
 
input{
 
width:100px;
 
height:30px;
 
}
 
button{
 
width:90px;
 
height:30px;
 
}
 
div table{
 
margin-left:auto;
 
margin-right:auto;}
 
table td{
 
text-align:center;
 
width:180px;
 
height:30px;
 
}
 
</style>
 
</head>
 
<body>
 
<center>
 
<h1><i> Молекулярная динамика </i></h1>
 
<table>
 
<tr><td colspan="2">
 
<canvas id='canvasex2' width=500 height=500 background-color=#FF99CC style='border: 1px dashed #000000' ></canvas>
 
</td></tr><tr><td>
 
<canvas id='canvasex1' width=220 height=300 background-color=#FF99CC style='border: 1px dashed #000000' ></canvas>
 
</td><td>
 
<canvas id='canvasex3' width=220 height=300 background-color=#FF99CC style='border: 1px dashed #000000' ></canvas>
 
</td></tr><tr>
 
<td><h2><i> Потенциальная энергия</i></td>
 
<td><h2><i> Кинетическая энергия</i> </td></tr>
 
</table>
 
<table>
 
<tr>
 
<td><input type="button" id="start" value="start" > </td>
 
<td> <input type="button" id="una" value="stop" width=40 height=20></td>
 
<td> <button onclick='window.location.reload(true)' style ='width=100 height=20'>clear</button></td>
 
</table>
 
<table>
 
<tr><th>
 
<input type="range" min="15" max="40" id="num"
 
oninput="main()" value="0"></th>
 
<th><div id="my">0</div></th></tr>
 
<tr><th>
 
<input type="number" id="b" name="b" value="0.0001"
 
min="0.0001" max="0.002" step="0.0002" style='border: 1px dashed #000000'></th>
 
<th> <div> <h3><i> Вязкость</i></div></th></tr>
 
<tr><th>
 
<input type="number" id="D" name="D" value="5"
 
min="1" max="10" step="1" style='border: 1px dashed #000000'></th>
 
<th> <div> <h3><i> Энергия связи</i></div></th></tr>
 
</table>
 
</center>
 
</body>
 
</html>
 
 
</syntaxhighlight>
 
</div>
 
Вам запрещено изменять защиту статьи. 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:

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