Редактирование: Взаимодействие частиц (JavaScript)

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

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

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
'''Исполнители:''' [[ Егорова Екатерина]], [[Эдель Мария]] <br>
+
'''Исполнители:''' [http://tm.spbstu.ru/%D0%95%D0%B3%D0%BE%D1%80%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0 Егорова Екатерина], Эдель Мария <br>
 
'''Группа:''' 3630103/90003 <br>
 
'''Группа:''' 3630103/90003 <br>
 
'''Семестр:''' весна 2020 года.<br>
 
'''Семестр:''' весна 2020 года.<br>
Строка 17: Строка 17:
 
== Визуализация ==
 
== Визуализация ==
 
{{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Egorova/mindex.html | width=700 | height=600 | border=0}}
 
{{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Egorova/mindex.html | width=700 | height=600 | border=0}}
 
+
== Код программы на языке JavaScript ==
==Скрипт==
 
 
<div class="mw-collapsible mw-collapsed">
 
<div class="mw-collapsible mw-collapsed">
'''Код программы на языке JavaScript:''' <div class="mw-collapsible-content">
+
'''Код программы:''' <div class="mw-collapsible-content">
<syntaxhighlight lang="javascript" line start="1" enclose="div">
+
{{#widget: Iframe | url=http://tm.spbstu.ru/htmlets/js2020/Egorova/mscript.js | width=1000 | height=1000 | border=0}}
window.addEventListener('load', main, false);
 
function main(){  
 
 
 
var ctx = canvas_example.getContext('2d');
 
var w = canvas_example.width;
 
var h = canvas_example.height;
 
 
 
 
 
function ball(x, y, r, m, Fx, Fy) {  
 
this.x = x;
 
this.y = y;
 
this.vx = 0;
 
this.vy = 0;
 
this.r = r;
 
this.m = m;
 
this.Fx = Fx;
 
this.Fy = Fy;
 
}
 
 
 
 
 
var X_c = w/2;
 
var Y_c = h/3;
 
var Vy_c = 0;
 
 
 
var balls = [];
 
var r = 10;
 
 
 
for (var i=0; i<27; i++) {
 
balls.push(new ball(r+(w)*(i/27), h-r, r, 1, 0, 0));
 
}
 
for (var i=0; i<26; i++) {
 
balls.push(new ball(2*r+(w)*(i/27), h-3*r, r, 1, 0, 0));
 
}
 
for (var i=0; i<27; i++) {
 
balls.push(new ball(r+(w)*(i/27), h-5*r, r, 1, 0, 0));
 
}
 
for (var i=0; i<26; i++) {
 
balls.push(new ball(2*r+(w)*(i/27), h-7*r, r, 1, 0, 0));
 
}
 
for (var i=0; i<27; i++) {
 
balls.push(new ball(r+(w)*(i/27), h-9*r, r, 1, 0, 0));
 
}
 
for (var i=0; i<26; i++) {
 
balls.push(new ball(2*r+(w)*(i/27), h-11*r, r, 1, 0, 0));
 
}
 
for (var i=0; i<27; i++) {
 
balls.push(new ball(r+(w)*(i/27), h-13*r, r, 1, 0, 0));
 
}
 
 
/*console.log(radius(R));
 
console.log(svyaz(D));
 
 
start.onclick = function() {
 
R = radius();
 
D = svyaz();*/
 
 
 
var r_ball = new ball(X_c, Y_c, R, 50, 0, 0)
 
r_ball.vy = 20;
 
var N = 159;
 
var a = 40;
 
var dt = 0.001;
 
var g = 1;
 
 
 
 
function draw() {
 
ctx.clearRect(0,0,w,h);
 
for (var i=0; i<N; i++) {
 
ctx.beginPath();
 
ctx.arc(balls[i].x, balls[i].y, balls[i].r, 0, 2*Math.PI);
 
ctx.fillStyle = '#FF4500'
 
ctx.stroke();
 
ctx.fill();
 
 
 
}
 
 
 
 
ctx.beginPath();
 
ctx.fillStyle = '#0000FF'
 
ctx.strokeStyle = '#000000';
 
ctx.arc(r_ball.x, r_ball.y, r_ball.r, 0, 2*Math.PI);
 
ctx.stroke();
 
ctx.fill();
 
 
}
 
 
 
 
 
 
function phys() {
 
// обнуляем силы шариков
 
for (var i=0; i<N; i++) {
 
balls[i].Fx = 0;
 
balls[i].Fy = 0;
 
}
 
r_ball.Fx = 0;
 
r_ball.Fy = 0;
 
// считаем силы
 
for (var i=0; i<N-1; i++) {
 
for (var j=i+1; j<N; j++) {
 
var a = balls[i].r+balls[j].r;
 
var r2 = (balls[i].x-balls[j].x)*(balls[i].x-balls[j].x)+(balls[i].y-balls[j].y)*(balls[i].y-balls[j].y);
 
var Fx = 12*D/a/a*(Math.pow(a, 14)/Math.pow(r2, 7)-Math.pow(a, 8)/Math.pow(r2, 4))*(balls[i].x-balls[j].x);
 
var Fy = 12*D/a/a*(Math.pow(a, 14)/Math.pow(r2, 7)-Math.pow(a, 8)/Math.pow(r2, 4))*(balls[i].y-balls[j].y);
 
balls[i].Fx += Fx/balls[i].m;
 
balls[i].Fy += Fy/balls[i].m;
 
balls[j].Fx -= Fx/balls[j].m;
 
balls[j].Fy -= Fy/balls[j].m;
 
}
 
var a = balls[i].r+r_ball.r;
 
var r2 = (balls[i].x-r_ball.x)*(balls[i].x-r_ball.x)+(balls[i].y-r_ball.y)*(balls[i].y-r_ball.y);
 
if (r2<a*a) {
 
var Fx = 12*D/a*(Math.pow(a, 14)/Math.pow(r2, 7)-Math.pow(a, 8)/Math.pow(r2, 4))*(balls[i].x-r_ball.x);
 
var Fy = 12*D/a*(Math.pow(a, 14)/Math.pow(r2, 7)-Math.pow(a, 8)/Math.pow(r2, 4))*(balls[i].y-r_ball.y);
 
balls[i].Fx += Fx/balls[i].m;
 
balls[i].Fy += Fy/balls[i].m;
 
r_ball.Fx -= Fx/r_ball.m;
 
r_ball.Fy -= Fy/r_ball.m;
 
}
 
}
 
 
// двигаем шарики
 
for (var i=0; i<N; i++) {
 
balls[i].vx += balls[i].Fx*dt;
 
balls[i].vy += (balls[i].Fy+g)*dt;
 
balls[i].x += balls[i].vx*dt;
 
balls[i].y += balls[i].vy*dt;
 
 
if (balls[i].y < r) {
 
balls[i].y = r;
 
}
 
 
if (balls[i].y > h-r) {
 
balls[i].y = h-r;
 
}
 
 
if (balls[i].x>w-r) {
 
balls[i].x = w-r;
 
}
 
 
if (balls[i].x<r) {
 
balls[i].x = r;
 
}
 
var betta = 0.7;
 
r_ball.vx += (r_ball.Fx-betta*r_ball.vx)*dt;
 
r_ball.vy += (r_ball.Fy+g-betta*r_ball.vy)*dt;
 
r_ball.x += r_ball.vx*dt;
 
r_ball.y += r_ball.vy*dt;
 
 
if (r_ball.y < r) {
 
r_ball.vy *=-1;
 
}  
 
 
if (r_ball.y > h-20) {
 
r_ball.vy *=-1;
 
}  
 
 
if (r_ball.x>w-20) {
 
r_ball.vx *=-1;
 
}
 
 
if (r_ball.x<20) {
 
r_ball.vx *=-1;
 
}
 
}
 
}
 
 
 
 
 
draw();
 
 
 
function control() {
 
phys();
 
draw();
 
}
 
 
 
var timer = setInterval(control, 10);
 
}
 
}
 
 
 
 
</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:

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