Balls v1 — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Новая страница: «Кафедра ТМ > Программирование > [[Программирование и моделирование в Интернет|Интер...»)
 
 
(не показано 6 промежуточных версий 3 участников)
Строка 1: Строка 1:
[[ТМ|Кафедра ТМ]] > [[Программирование]] > [[Программирование и моделирование в Интернет|Интернет]] > [[JavaScript-программирование|JavaScript]] > [[JavaScript - Balls|Balls]] > '''Balls v1''' <HR>
+
[[Виртуальная лаборатория]] > [[Динамика взаимодействующих частиц]] > [[Balls - версии]] > [[Balls v1]] <HR>
  
<addscript src=Balls_v1_release/>
+
{{#widget:Iframe |url=http://tm.spbstu.ru/htmlets/Tcvetkov/Balls/Balls_v1_release/Balls_v1_release.html |width=830 |height=630 |border=0 }}
<htmlet nocache="yes">Balls_v1_TM</htmlet>
 
  
  
 
Скачать программу: [[Медиа:Balls_v1_release.zip|Balls_v1_release.zip]]
 
Скачать программу: [[Медиа:Balls_v1_release.zip|Balls_v1_release.zip]]
Текст программы на языке JavaScript (разработчики [[Кривцов Антон]], [[Цветков Денис]]): <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  
+
<div class="mw-collapsible mw-collapsed" style="width:100%" >
 +
'''Текст программы на языке JavaScript (разработчики [[Кривцов Антон]], [[Цветков Денис]]):''' <div class="mw-collapsible-content">
 
Файл '''"Balls_v1_release.js"'''
 
Файл '''"Balls_v1_release.js"'''
<source lang="javascript" first-line="1">
+
<syntaxhighlight lang="javascript" line start="1" enclose="div">
function MainBalls(canvas) {
+
window.addEventListener("load", MainBalls, true);
 +
function MainBalls() {
  
 
     // Предварительные установки
 
     // Предварительные установки
  
     var context = canvas.getContext("2d");  // на context происходит рисование
+
     var context = canvasBalls.getContext("2d");  // на context происходит рисование
  
     const Pi = 3.1415926;                  // число "пи"
+
     var Pi = 3.1415926;                  // число "пи"
  
     const m0 = 1;                          // масштаб массы
+
     var m0 = 1;                          // масштаб массы
     const T0 = 1;                          // масштаб времени (период колебаний исходной системы)
+
     var T0 = 1;                          // масштаб времени (период колебаний исходной системы)
     const a0 = 1;                          // масштаб расстояния (диаметр шара)
+
     var a0 = 1;                          // масштаб расстояния (диаметр шара)
  
     const g0 = a0 / T0 / T0;                // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
+
     var g0 = a0 / T0 / T0;                // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
     const k0 = 2 * Pi / T0;                // масштаб частоты
+
     var k0 = 2 * Pi / T0;                // масштаб частоты
     const C0 = m0 * k0 * k0;                // масштаб жесткости
+
     var C0 = m0 * k0 * k0;                // масштаб жесткости
     const B0 = 2 * m0 * k0;                // масштаб вязкости
+
     var B0 = 2 * m0 * k0;                // масштаб вязкости
  
 
     // *** Задание физических параметров ***
 
     // *** Задание физических параметров ***
  
     const Ny = 5;                          // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
+
     var Ny = 5;                          // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
     const m = 1 * m0;                      // масса
+
     var m = 1 * m0;                      // масса
     const Cwall = 10 * C0;                  // жесткость стен
+
     var Cwall = 10 * C0;                  // жесткость стен
     const B = 0.008 * B0;                  // вязкость среды
+
     var B = 0.008 * B0;                  // вязкость среды
     const B1 = 0.03 * B0;                  // вязкость на стенках
+
     var B1 = 0.03 * B0;                  // вязкость на стенках
     const mg = 0.25 * m * g0;              // сила тяжести
+
     var mg = 0.25 * m * g0;              // сила тяжести
     const r = 0.5 * a0;                    // радиус частицы в расчетных координатах
+
     var r = 0.5 * a0;                    // радиус частицы в расчетных координатах
  
 
     // *** Задание вычислительных параметров ***
 
     // *** Задание вычислительных параметров ***
  
     const fps = 50;                        // frames per second - число кадров в секунду (качечтво отображения)
+
     var fps = 50;                        // frames per second - число кадров в секунду (качечтво отображения)
     const spf = 100;                        // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
+
     var spf = 100;                        // steps per frame  - число шагов интегрирования между кадрами (скорость расчета)
     const dt  = 0.045 * T0 / fps;          // шаг интегрирования (качество расчета)
+
     var dt  = 0.045 * T0 / fps;          // шаг интегрирования (качество расчета)
  
 
     // Выполнение программы
 
     // Выполнение программы
  
     const scale = canvas.height / Ny / a0;  // масштабный коэффициент для перехода от расчетных к экранным координатам
+
     var scale = canvasBalls.height / Ny / a0;  // масштабный коэффициент для перехода от расчетных к экранным координатам
  
     var w = canvas.width / scale;          // ширина окна в расчетных координатах
+
     var w = canvasBalls.width / scale;          // ширина окна в расчетных координатах
     var h = canvas.height / scale;          // высота окна в расчетных координатах
+
     var h = canvasBalls.height / scale;          // высота окна в расчетных координатах
  
 
     // Добавление шара
 
     // Добавление шара
  
 
     var b = [];
 
     var b = [];
 +
 +
 
     b.x = w / 2;            b.y = h / 2;    // расчетные координаты шара
 
     b.x = w / 2;            b.y = h / 2;    // расчетные координаты шара
 
     b.fx = 0;              b.fy = mg;      // сила, действующая на шар
 
     b.fx = 0;              b.fy = mg;      // сила, действующая на шар
Строка 79: Строка 82:
 
         }
 
         }
 
     }
 
     }
 +
  
 
     // Рисование
 
     // Рисование
Строка 85: Строка 89:
 
     function draw() {
 
     function draw() {
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
 
         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
            context.beginPath();
+
        context.beginPath();
            context.arc(b.x * scale, b.y * scale, r * scale, 0, 2 * Math.PI, false);
+
 
            context.closePath();
+
        context.arc(b.x * scale, b.y * scale, r * scale, 0, 2 * Math.PI, false);
            context.fill();
+
        context.fill();
 +
 
 +
        context.closePath();
 
     }
 
     }
  
 
     setInterval(control, 1000 / fps);                      // Запуск системы
 
     setInterval(control, 1000 / fps);                      // Запуск системы
 
}
 
}
</source>
+
</syntaxhighlight>
 
Файл '''"Balls_v1_release.html"'''
 
Файл '''"Balls_v1_release.html"'''
<source lang="html" first-line="1">
+
<syntaxhighlight lang="html5" line start="1" enclose="div">
 
<!DOCTYPE html>
 
<!DOCTYPE html>
 
<html>
 
<html>
Строка 104: Строка 110:
 
<body>
 
<body>
 
     <canvas id="canvasBalls" width="800" height="600" style="border:1px solid #000000;"></canvas>
 
     <canvas id="canvasBalls" width="800" height="600" style="border:1px solid #000000;"></canvas>
    <script type="text/javascript">MainBalls(document.getElementById('canvasBalls'));</script>
 
 
</body>
 
</body>
 
</html>
 
</html>
</source>
+
</syntaxhighlight>
</toggledisplay>
+
</div>
 +
</div>
 +
 
  
 +
[[Category: Виртуальная лаборатория]]
 
[[Category: Программирование]]
 
[[Category: Программирование]]
[[Category: JavaScript]]
 

Текущая версия на 08:50, 11 марта 2015

Виртуальная лаборатория > Динамика взаимодействующих частиц > Balls - версии > Balls v1


Скачать программу: Balls_v1_release.zip

Текст программы на языке JavaScript (разработчики Кривцов Антон, Цветков Денис):

Файл "Balls_v1_release.js"

 1 window.addEventListener("load", MainBalls, true);
 2 function MainBalls() {
 3 
 4     // Предварительные установки
 5 
 6     var context = canvasBalls.getContext("2d");  // на context происходит рисование
 7 
 8     var Pi = 3.1415926;                   // число "пи"
 9 
10     var m0 = 1;                           // масштаб массы
11     var T0 = 1;                           // масштаб времени (период колебаний исходной системы)
12     var a0 = 1;                           // масштаб расстояния (диаметр шара)
13 
14     var g0 = a0 / T0 / T0;                // масштаб ускорения (ускорение, при котором за T0 будет пройдено расстояние a0)
15     var k0 = 2 * Pi / T0;                 // масштаб частоты
16     var C0 = m0 * k0 * k0;                // масштаб жесткости
17     var B0 = 2 * m0 * k0;                 // масштаб вязкости
18 
19     // *** Задание физических параметров ***
20 
21     var Ny = 5;                           // число шаров, помещающихся по вертикали в окно (задает размер шара относительно размера окна)
22     var m = 1 * m0;                       // масса
23     var Cwall = 10 * C0;                  // жесткость стен
24     var B = 0.008 * B0;                   // вязкость среды
25     var B1 = 0.03 * B0;                   // вязкость на стенках
26     var mg = 0.25 * m * g0;               // сила тяжести
27     var r = 0.5 * a0;                     // радиус частицы в расчетных координатах
28 
29     // *** Задание вычислительных параметров ***
30 
31     var fps = 50;                         // frames per second - число кадров в секунду (качечтво отображения)
32     var spf = 100;                        // steps per frame   - число шагов интегрирования между кадрами (скорость расчета)
33     var dt  = 0.045 * T0 / fps;           // шаг интегрирования (качество расчета)
34 
35     // Выполнение программы
36 
37     var scale = canvasBalls.height / Ny / a0;  // масштабный коэффициент для перехода от расчетных к экранным координатам
38 
39     var w = canvasBalls.width / scale;           // ширина окна в расчетных координатах
40     var h = canvasBalls.height / scale;          // высота окна в расчетных координатах
41 
42     // Добавление шара
43 
44     var b = [];
45 
46 
47     b.x = w / 2;            b.y = h / 2;    // расчетные координаты шара
48     b.fx = 0;               b.fy = mg;      // сила, действующая на шар
49     b.vx = 3;               b.vy = -1.5;    // начальная скорость
50 
51     // Основной цикл программы
52 
53     function control() {
54         physics();
55         draw();
56     }
57 
58     // Расчетная часть программы
59 
60     function physics() {                    // то, что происходит каждый шаг времени
61         for (var s = 1; s <= spf; s++) {
62             b.fx = - B * b.vx;
63             b.fy = mg - B * b.vy;
64 
65             if (b.y + r > h) { b.fy += -Cwall * (b.y + r - h) - B1 * b.vy; }
66             if (b.y - r < 0) { b.fy += -Cwall * (b.y - r) - B1 * b.vy;}
67             if (b.x + r > w) { b.fx += -Cwall * (b.x + r - w) - B1 * b.vx; }
68             if (b.x - r < 0) { b.fx += -Cwall * (b.x - r) - B1 * b.vx; }
69 
70             b.vx += b.fx / m * dt;        b.vy += b.fy / m * dt;
71             b.x += b.vx * dt;             b.y += b.vy * dt;
72         }
73     }
74 
75 
76     // Рисование
77 
78     context.fillStyle = "#3070d0";                          // цвет
79     function draw() {
80         context.clearRect(0, 0, w * scale, h * scale);      // очистить экран
81         context.beginPath();
82 
83         context.arc(b.x * scale, b.y * scale, r * scale, 0, 2 * Math.PI, false);
84         context.fill();
85 
86         context.closePath();
87     }
88 
89     setInterval(control, 1000 / fps);                       // Запуск системы
90 }

Файл "Balls_v1_release.html"

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>Balls</title>
 5     <script src="Balls_v1_release.js"></script>
 6 </head>
 7 <body>
 8     <canvas id="canvasBalls" width="800" height="600" style="border:1px solid #000000;"></canvas>
 9 </body>
10 </html>