Dynamics of a particle in a central field
Материал из Department of Theoretical and Applied Mechanics
Версия от 22:45, 24 мая 2016; 213.110.201.38 (обсуждение) (Новая страница: «Virtual laboratory > Dynamics of a particle in a central field <HR> Developer: А.М. Кривцов<HR> Interactive application, shown below, allow…»)
Virtual laboratory > Dynamics of a particle in a central field
Developer: А.М. Кривцов
Developer: А.М. Кривцов
Interactive application, shown below, allows us to study the trajectories of a particle in the central power-law potential field. The interaction force
is a degree function of distance :where
is some real dimensionless degree exponent. The attraction center is at the point.
v0 = v1
n =
zoom =
tmax = T
Номер эксперимента
The text of the program is written in JavaScript:
Файл "FC.js"
1 // Движение материальной точки в центральном поле
2 // Разработчик А.М. Кривцов
3 // 18-21.05.2014
4 // Интернет: tm.spbstu.ru/FC
5
6 function MainFC(canvas) {
7
8 // Основные размерные параметры
9
10 const m = 1.; // масса частицы
11 const a = 1.; // радиус круговой орбиты
12 const P = 1.; // сила притяжения на круговой орбите
13
14 // Производные размерные параметры
15
16 const T = 2 * Math.PI * Math.sqrt(m * a / P); // период движения по круговой орбите
17 const v1 = Math.sqrt(P * a / m); // скорость движения по круговой орбите (1-ая космическая)
18
19 // Переменные
20
21 var n, v0, zoom, t_max, dt;
22
23 // настройка слайдеров
24
25 Slider_01.min = 1; Slider_01.max = 22; Slider_01.step = 0.1; // v0 / v1 - начальная скорость
26 Slider_02.max = 6; Slider_02.min = -Slider_02.max; Slider_02.step = 0.01; // n - показатель степени
27 Slider_03.min = 0; Slider_03.max = 6; Slider_03.step = 0.01; // zoom - увеличение
28 Slider_04.min = 0; Slider_04.max = 100; Slider_04.step = 0.1; // t_max/T - время расчета
29 Slider_05.min = 1; Slider_05.max = set_exp(0); Slider_05.step = 1; // N_exp - номер эксперимента
30
31 Slider_05.focus();
32
33 // Задание значений переменных
34
35 dt = T / 200; // шаг интегрирования
36 set_exp(6); // переменные заданы для эксперимента 6
37
38 // Отображение
39
40 draw();
41
42 // функции, запускающиеся при изменении значений слайдеров и текстовых полей
43
44 this.set_01 = function(input) { v0 = Number(input) * v1; draw(); }
45 this.set_02 = function(input) { n = Number(input); draw(); }
46 this.set_03 = function(input) { zoom = Number(input); draw(); }
47 this.set_04 = function(input) { t_max = Number(input) * T; draw(); }
48 this.set_05 = function(input) { set_exp(input); draw(); }
49
50 // Отображение
51
52 function draw()
53 {
54 // Оптимизация
55
56 var n1 = (1 - n) / 2;
57 var dt1 = -P / m * Math.pow(a, -n) * dt;
58
59 // Область построения графика
60
61 const X_max = canvas.width, Y_max = canvas.height;
62 var x_max, y_max, sx, sy, X0, Y0;
63
64 x_max = y_max = Math.pow(2, zoom) * a; // размер области отображения
65 x_min = y_min = -x_max;
66
67 sx = sy = Y_max / (y_max - y_min); // масштаб по оси y
68 X0 = Y0 = Y_max + y_min * sy; // положение 0 оси y в экранных координатах
69
70 // Инициализация графики
71
72 var context = canvas.getContext("2d"); // на context происходит рисование
73 context.clearRect(0, 0, X_max, Y_max); // очистить экран
74
75 // Горизонтальная ось
76 context.strokeStyle = 'lightgrey';
77 context.beginPath();
78 context.moveTo(0, Y0); context.lineTo(X_max, Y0);
79 context.moveTo(X0, 0); context.lineTo(X0, Y_max);
80 context.moveTo(X0 + a * sx, Y0); context.arc(X0, Y0, a * sx, 0, 2 * Math.PI);
81 context.stroke();
82
83 // Надписи
84 context.fillStyle = 'black';
85 context.font = "italic 20px Times";
86 context.fillText("0", X0 - 15, Y0 - 7);
87
88 // График
89 context.strokeStyle = 'black';
90 context.beginPath();
91 var vx = v0, vy = 0;
92 var x = 0, y = a;
93 context.moveTo(X0, Y0 - a * sy);
94 for (var t = 0; t < t_max; t += dt)
95 {
96 var r2 = x * x + y * y;
97 var rn = Math.pow(r2, n1);
98 vx += x / rn * dt1;
99 vy += y / rn * dt1;
100 x += vx * dt;
101 y += vy * dt;
102 var X = X0 + x * sx;
103 var Y = Y0 - y * sy;
104 context.lineTo(X, Y);
105 }
106 context.stroke();
107 }
108
109 // Выбор эксперимента
110
111 function set_exp(N_exp)
112 {
113 var k = Number(N_exp);
114
115 // показатель степени начальная скорость увеличение максимальное число шагов
116
117 if (!--k) { n = -3; v0 = 1.004 * v1; zoom = 2.98; t_max = 17.4 * T; } // спираль
118 if (!--k) { n = -2.9; v0 = 1.023 * v1; zoom = 2.98; t_max = 67.6 * T; }
119 if (!--k) { n = -2.87; v0 = 1.029 * v1; zoom = 2.57; t_max = 21.6 * T; }
120 if (!--k) { n = -2.87; v0 = 1.03 * v1; zoom = 2.96; t_max = 94.4 * T; }
121 if (!--k) { n = -2.5; v0 = 1.135 * v1; zoom = 2.98; t_max = 31.1 * T; } // 2
122
123 if (!--k) { n = -2; v0 = 1.25 * v1; zoom = 2; t_max = 20 * T; } // эллипс
124
125 if (!--k) { n = -1; v0 = 1.25 * v1; zoom = 1; t_max = 26 * T; }
126 if (!--k) { n = -1; v0 = 1.36 * v1; zoom = 1.18; t_max = 10.8 * T; } // 10
127 if (!--k) { n = -1; v0 = 1.63 * v1; zoom = 1.87; t_max = 25.3 * T; }
128 if (!--k) { n = -1; v0 = 1.93 * v1; zoom = 2.8; t_max = 8 * T; } // 3 !
129 if (!--k) { n = -1; v0 = 2.31 * v1; zoom = 3.92; t_max = 64.1 * T; } // 11
130 if (!--k) { n = -1; v0 = 2.43 * v1; zoom = 4.29; t_max = 61.8 * T; } // 8
131 if (!--k) { n = -1; v0 = 2.74 * v1; zoom = 5.5; t_max = 85.5 * T; } // 5
132
133 if (!--k) { n = -0.74; v0 = 2.665 * v1; zoom = 3.81; t_max = 18.8 * T; } // 5
134
135 if (!--k) { n = 0; v0 = 1.66 * v1; zoom = 1.39; t_max = 5.1 * T; } // 7
136 if (!--k) { n = 0; v0 = 2.7 * v1; zoom = 2.34; t_max = 8.9 * T; } // 9
137 if (!--k) { n = 0; v0 = 3.46 * v1; zoom = 3.03; t_max = 13.3 * T; } // 11
138
139 if (!--k) { n = 1; v0 = 2 * v1; zoom = 1.3; t_max = 1 * T; } // 11
140
141 if (!--k) { n = 2; v0 = 2.39 * v1; zoom = 1.18; t_max = 4.0 * T; } // 11
142
143 if (!--k) { n = 3; v0 = 3.58 * v1; zoom = 1.28; t_max = 1.8 * T; } // 7
144 if (!--k) { n = 3; v0 = 6.97 * v1; zoom = 1.87; t_max = 1.7 * T; } // 9
145 if (!--k) { n = 3; v0 = 11.28 * v1; zoom = 2.13; t_max = 1.6 * T; } // 11
146 if (!--k) { n = 3; v0 = 16.13 * v1; zoom = 2.50; t_max = 1.6 * T; } // 13
147
148 if (!--k) { n = 3.29; v0 = 1.3 * v1; zoom = 0.48; t_max = 1.8 * T; } // 13
149
150 if (!--k) { n = 4; v0 = 3.36 * v1; zoom = 1.12; t_max = 1.1 * T; } // 5 !
151 if (!--k) { n = 4; v0 = 6.08 * v1; zoom = 1.44; t_max = 1.9 * T; } // 12
152 if (!--k) { n = 4; v0 = 9.52 * v1; zoom = 1.66; t_max = 0.9 * T; } // 7 !
153 if (!--k) { n = 4; v0 = 18.45 * v1; zoom = 2.18; t_max = 0.728 * T; } // 9
154
155 if (!--k) { n = 5; v0 = 7.15 * v1; zoom = 1.55; t_max = 0.6 * T; } // 5 !
156
157 if (!--k) { n = 4; v0 = 3.304 * v1; zoom = 1.12; t_max = 36.4 * T; } // 5 ~~~
158 if (!--k) { n = 4; v0 = 9.394 * v1; zoom = 1.66; t_max = 19.6 * T; } // 7 ~~~
159
160 if (N_exp)
161 {
162 Text_01.value = v0 / v1; Slider_01.value = Text_01.value; // начальная скорость
163 Text_02.value = n; Slider_02.value = Text_02.value; // показатель степени
164 Text_03.value = zoom; Slider_03.value = Text_03.value; // увеличение
165 Text_04.value = t_max / T; Slider_04.value = Text_04.value; // время расчета
166 Text_05.value = N_exp; Slider_05.value = Text_05.value; // номер эксперимента
167 }
168
169 return -k; // Если N_exp = 0 возвращает общее количество экспериментов, в остальных случаях возвращает 0
170 }
171 }
Файл "FC.html"
1 <canvas id="canvasGraph" width="600" height="600" style="border:1px solid #000000;"></canvas>
2
3 <!--Установка параметров взаимодействия (текстовые поля и слайдеры)-->
4 <div>
5 <font face= "Times New Roman"><I>
6 v</I><SUB>0</SUB> = <input id="Text_01" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
7 // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
8 if (!this.checkValidity()) return;
9 app.set_01(this.value);
10 document.getElementById('Slider_01').value = this.value;
11 "><I> v</I><SUB>1</SUB>
12 <input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;">
13 n = <input id="Text_02" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
14 if (!this.checkValidity()) return;
15 app.set_02(this.value);
16 document.getElementById('Slider_02').value = this.value;
17 ">
18 <input type="range" id="Slider_02" style="width: 100px;" oninput="app.set_02(this.value); document.getElementById('Text_02').value = this.value;">
19 </font>
20 </div>
21 <div>
22 <font face= "Times New Roman">
23 zoom = <input id="Text_03" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
24 // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
25 if (!this.checkValidity()) return;
26 app.set_03(this.value);
27 document.getElementById('Slider_03').value = this.value;
28 ">
29 <input type="range" id="Slider_03" style="width: 100px;" oninput="app.set_03(this.value); document.getElementById('Text_03').value = this.value;">
30 <I>t</I><SUB>max</SUB> = <input id="Text_04" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
31 if (!this.checkValidity()) return;
32 app.set_04(this.value);
33 document.getElementById('Slider_04').value = this.value;
34 "><I> T</I>
35 <input type="range" id="Slider_04" style="width: 100px;" oninput="app.set_04(this.value); document.getElementById('Text_04').value = this.value;">
36 </font>
37 </div>
38 <div>
39 <font face= "Times New Roman">
40 Номер эксперимента <input id="Text_05" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
41 // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
42 if (!this.checkValidity()) return;
43 app.set_05(this.value);
44 document.getElementById('Slider_05').value = this.value;
45 ">
46 <input type="range" id="Slider_05" style="width: 100px;" oninput="app.set_05(this.value); document.getElementById('Text_05').value = this.value;">
47 </div>
48
49 <script type="text/javascript">var app = new MainFC (
50 document.getElementById('canvasGraph')
51 );</script>
The application allows to set the following parameters interactively:
- — initial velocity of the point. The initial velocity is directed tangentially (perpendicular to the radial direction).Velocity is measured in relation to the - speed circular motion on the initial distance from the center (the first cosmic speed).
- — is an index in the law of interaction( corresponds to the gravitational interaction, - the linear-elastic).
- zoom is the logarithmic scale of display of the schedule (the logarithm on the basis 2 is used).
- — integration time expressed in periods of circular motion at the initial distance from the center.
Besides, it is possible to set "number of the experiment". Every number has a separate set of four parameters named above and characterized by some specific kind of movement. Experiments are ordered by
(first), then by .The proposed research areas
- To define possible variants of motion
- To define the dependence of the distance to the epicenter (the most distant point) of the orbit from and .
- To find closed trajectories of different topologies (for example, 5th, the 7th terminating stars, etc.) and to determine their position on the plane of the parameters , .
- To find a method for integrating of the equations of motion with a variable step allowing to model the movement of a point at large effectively.
- • To pick up values of parameters (and to develop a method of such selection), allowing to receive "beautiful" schedules which can be considered as objects of Science Art (see in particular, last numbers of experiments).