Движение материальной точки в центральном поле — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
Строка 16: Строка 16:
 
// Движение материальной точки в центральном поле
 
// Движение материальной точки в центральном поле
 
// Разработчик А.М. Кривцов  
 
// Разработчик А.М. Кривцов  
// 18.05.2014  
+
// 18-21.05.2014  
 
// Интернет: tm.spbstu.ru/FC
 
// Интернет: tm.spbstu.ru/FC
  
 
function MainFC(canvas) {
 
function MainFC(canvas) {
  
     // Предварительные установки
+
     // Основные размерные параметры
 
 
const X_max = canvas.width;
 
const Y_max = canvas.height;
 
 
    // Размерные параметры
 
 
      
 
      
 
     const m = 1.;  // масса частицы
 
     const m = 1.;  // масса частицы
Строка 32: Строка 27:
 
     const P = 1.; // сила притяжения на круговой орбите
 
     const P = 1.; // сила притяжения на круговой орбите
  
     // Расчет констант взаимодействия
+
     // Производные размерные параметры 
  
 
const T = 2 * Math.PI * Math.sqrt(m * a / P); // период движения по круговой орбите
 
const T = 2 * Math.PI * Math.sqrt(m * a / P); // период движения по круговой орбите
 
const v1 = Math.sqrt(P * a / m); // скорость движения по круговой орбите (1-ая космическая)
 
const v1 = Math.sqrt(P * a / m); // скорость движения по круговой орбите (1-ая космическая)
 
 
    // Объявление переменных
+
// Переменные
 
 
var n, n1, dt1, zoom;
+
var n, v0, zoom, t_max, dt;
var x_min, x_max, sx, X0;
 
var y_min, y_max, sy, Y0;  
 
 
 
// Задание начальных значений параметров
 
 
 
var v0 = 1.25 * v1; // начальная скорость
+
// настройка слайдеров
var t_max = 20 * T; // время интегрирования
 
var dt = T / 200;      // шаг интегрирования
 
 
 
    set_n(-2);    // n - показатель степени в законе взаимодействия
 
set_zoom(2);    // размер области отображения
 
 
 
var context; // на context происходит рисование
+
Slider_01.min = 1; Slider_01.max = 22; Slider_01.step = 0.1; // v0 / v1 - начальная скорость
 +
Slider_02.max = 6; Slider_02.min = -Slider_02.max; Slider_02.step = 0.01; // n - показатель степени
 +
Slider_03.min = 0;      Slider_03.max = 6; Slider_03.step = 0.01; // zoom - увеличение
 +
Slider_04.min = 0;      Slider_04.max = 100; Slider_04.step = 0.1; // t_max/T - время расчета
 +
Slider_05.min = 1;      Slider_05.max = set_exp(0); Slider_05.step = 1; // N_exp - номер эксперимента
 
 
    // настройка слайдеров и текстовых полей
+
Slider_05.focus();
   
+
 
Slider_01.min = 1;
+
// Задание значений переменных
    Slider_01.max = 2;
 
    Slider_01.step = 0.01;
 
    Slider_01.value = v0 / v1;   
 
    Text_01.value = Slider_01.value;
 
   
 
    Slider_02.max = 4;
 
Slider_02.min = -Slider_02.max;     
 
    Slider_02.step = 0.01;
 
    Slider_02.value = n;   
 
    Text_02.value = Slider_02.value;
 
 
 
Slider_03.min = 0;       
+
dt = T / 200;      // шаг интегрирования
    Slider_03.max = 6;
+
set_exp(6); // переменные заданы для эксперимента 6
    Slider_03.step = 0.01;
+
 
Slider_03.value = zoom;       
+
// Отображение
Slider_03.value = 2;   
 
    Text_03.value = Slider_03.value;
 
 
Slider_04.min = 0;     
 
    Slider_04.max = 100;
 
    Slider_04.step = 0.1;
 
Slider_04.value = t_max / T;       
 
    Text_04.value = Slider_04.value;
 
 
 
 
draw();
 
draw();
  
     // функции, запускающиеся при перемещении слайдера
+
     // функции, запускающиеся при изменении значений слайдеров и текстовых полей
  
     this.set_01 = function(input) { v0 = Number(input) * v1; draw(); }   
+
     this.set_01 = function(input) { v0 = Number(input) * v1; draw(); }   
     this.set_02 = function(input) { set_n(input); draw(); }   
+
     this.set_02 = function(input) { n = Number(input); draw(); }   
     this.set_03 = function(input) { set_zoom(input); draw(); }  
+
     this.set_03 = function(input) { zoom = Number(input); draw(); }  
     this.set_04 = function(input) { t_max = Number(input) * T; draw(); }
+
     this.set_04 = function(input) { t_max = Number(input) * T; draw(); }
 +
    this.set_05 = function(input) { set_exp(input); draw(); }
 
 
function set_n(value)
 
{
 
n = Number(value);
 
n1 = (1 - n) / 2;
 
dt1 = -P / m * Math.pow(a, - n) * dt;
 
}
 
   
 
function set_zoom(value)
 
{
 
x_max = Number(value) * a; // размер области отображения
 
zoom = Number(value);
 
x_max = Math.pow(2, zoom) * a; // размер области отображения
 
 
// Область построения графика
 
 
y_max = x_max;     
 
x_min = -x_max; 
 
y_min = -y_max;   
 
 
sy = Y_max / (y_max - y_min); // масштаб по оси y
 
Y0 = Y_max + y_min * sy;  // положение 0 оси y в экранных координатах
 
sx = sy;
 
X0 = Y0;
 
}
 
   
 
 
// Отображение
 
// Отображение
 
 
 
function draw()  
 
function draw()  
 
{  
 
{  
  // Расчет параметров графики
+
// Оптимизация
 
 
context = canvas.getContext("2d");  // на context происходит рисование
+
var n1 = (1 - n) / 2;
 +
var dt1 = -P / m * Math.pow(a, -n) * dt;
 +
 +
// Область построения графика
 +
 +
const X_max = canvas.width, Y_max = canvas.height;
 +
var x_max, y_max, sx, sy, X0, Y0;
 +
 +
x_max = y_max = Math.pow(2, zoom) * a; // размер области отображения
 +
x_min = y_min = -x_max; 
 +
 
 +
sx = sy = Y_max / (y_max - y_min); // масштаб по оси y
 +
X0 = Y0 = Y_max + y_min * sy;  // положение 0 оси y в экранных координатах
 +
 
 +
  // Инициализация графики
 +
 +
var context = canvas.getContext("2d");  // на context происходит рисование
 
context.clearRect(0, 0, X_max, Y_max); // очистить экран
 
context.clearRect(0, 0, X_max, Y_max); // очистить экран
 
          
 
          
Строка 137: Строка 101:
 
         context.fillText("0", X0 - 15, Y0 - 7);
 
         context.fillText("0", X0 - 15, Y0 - 7);
 
 
 +
// График
 
context.strokeStyle = 'black';
 
context.strokeStyle = 'black';
 
context.beginPath();
 
context.beginPath();
var vx = v0;
+
var vx = v0, vy = 0;
var vy = 0;
+
var x = 0, y = a;
var x = 0;
 
var y = a;
 
 
context.moveTo(X0, Y0 - a * sy);
 
context.moveTo(X0, Y0 - a * sy);
 
for (var t = 0; t < t_max; t += dt)
 
for (var t = 0; t < t_max; t += dt)
 
{
 
{
 
var r2 = x * x + y * y;
 
var r2 = x * x + y * y;
// var r = Math.sqrt(r2); var rn = Math.pow(r, 1 - n);
 
 
var rn = Math.pow(r2, n1);
 
var rn = Math.pow(r2, n1);
 
vx += x / rn * dt1;
 
vx += x / rn * dt1;
Строка 158: Строка 120:
 
}
 
}
 
context.stroke();
 
context.stroke();
 +
}
 +
 +
// Выбор эксперимента
 +
 +
function set_exp(N_exp)
 +
{
 +
var k = Number(N_exp);
 +
 +
// показатель степени начальная скорость увеличение максимальное число шагов
 +
 +
if (!--k) { n = -3; v0 = 1.004 * v1; zoom = 2.98; t_max = 17.4 * T; }  // спираль
 +
if (!--k) { n = -2.9; v0 = 1.023 * v1; zoom = 2.98; t_max = 67.6 * T; } 
 +
if (!--k) { n = -2.87; v0 = 1.029 * v1; zoom = 2.57; t_max = 21.6 * T; } 
 +
if (!--k) { n = -2.87; v0 = 1.03 * v1; zoom = 2.96; t_max = 94.4 * T; } 
 +
if (!--k) { n = -2.5; v0 = 1.135 * v1; zoom = 2.98; t_max = 31.1 * T; }  // 2
 +
 +
if (!--k) { n = -2; v0 = 1.25 * v1; zoom = 2; t_max = 20 * T; }  // эллипс
 +
 +
if (!--k) { n = -1; v0 = 1.25 * v1; zoom = 1; t_max = 26 * T; }
 +
if (!--k) { n = -1; v0 = 1.36 * v1; zoom = 1.18; t_max = 10.8 * T; } // 10
 +
if (!--k) { n = -1; v0 = 1.63 * v1; zoom = 1.87; t_max = 25.3 * T; }
 +
if (!--k) { n = -1; v0 = 1.93 * v1; zoom = 2.8; t_max = 8 * T; } //  3 !
 +
if (!--k) { n = -1; v0 = 2.31 * v1; zoom = 3.92; t_max = 64.1 * T; } // 11
 +
if (!--k) { n = -1; v0 = 2.43 * v1; zoom = 4.29; t_max = 61.8 * T; } //  8
 +
if (!--k) { n = -1; v0 = 2.74 * v1; zoom = 5.5; t_max = 85.5 * T; } //  5
 +
 +
if (!--k) { n = -0.74; v0 = 2.665 * v1; zoom = 3.81; t_max = 18.8 * T; } //  5
 +
 +
if (!--k) { n = 0; v0 = 1.66 * v1; zoom = 1.39; t_max = 5.1 * T; } //  7
 +
if (!--k) { n = 0; v0 = 2.7  * v1; zoom = 2.34; t_max = 8.9 * T; } //  9
 +
if (!--k) { n = 0; v0 = 3.46 * v1; zoom = 3.03; t_max = 13.3 * T; } // 11
 +
 +
if (!--k) { n = 1; v0 = 2 * v1; zoom = 1.3; t_max = 1 * T; } // 11
 +
 +
if (!--k) { n = 2; v0 = 2.39 * v1; zoom = 1.18; t_max = 4.0 * T; } // 11
 +
 +
if (!--k) { n = 3; v0 = 3.58 * v1; zoom = 1.28; t_max = 1.8 * T; } //  7
 +
if (!--k) { n = 3; v0 = 6.97 * v1; zoom = 1.87; t_max = 1.7 * T; } //  9
 +
if (!--k) { n = 3; v0 = 11.28 * v1; zoom = 2.13; t_max = 1.6 * T; } // 11
 +
if (!--k) { n = 3; v0 = 16.13 * v1; zoom = 2.50; t_max = 1.6 * T; } // 13
 +
 +
if (!--k) { n = 3.29; v0 = 1.3 * v1; zoom = 0.48; t_max = 1.8 * T; } // 13
 +
 +
if (!--k) { n = 4; v0 = 3.36 * v1; zoom = 1.12; t_max = 1.1 * T; } //  5 !
 +
if (!--k) { n = 4; v0 = 6.08 * v1; zoom = 1.44; t_max = 1.9 * T; } // 12
 +
if (!--k) { n = 4; v0 = 9.52 * v1; zoom = 1.66; t_max = 0.9 * T; } //  7 !
 +
if (!--k) { n = 4; v0 = 18.45 * v1; zoom = 2.18; t_max = 0.728 * T; } //  9
 +
 +
if (!--k) { n = 5; v0 = 7.15 * v1; zoom = 1.55; t_max = 0.6 * T; } //  5 !
 +
 +
if (!--k) { n = 4; v0 = 3.304 * v1; zoom = 1.12; t_max = 36.4 * T; } //  5 ~~~
 +
if (!--k) { n = 4; v0 = 9.394 * v1; zoom = 1.66; t_max = 19.6 * T; } //  7 ~~~
 +
 +
if (N_exp)
 +
{
 +
Text_01.value = v0 / v1; Slider_01.value = Text_01.value; // начальная скорость    
 +
Text_02.value = n;    Slider_02.value = Text_02.value;        // показатель степени
 +
Text_03.value = zoom;    Slider_03.value = Text_03.value;     // увеличение
 +
Text_04.value = t_max / T;    Slider_04.value = Text_04.value; // время расчета  
 +
Text_05.value = N_exp;          Slider_05.value = Text_05.value;        // номер эксперимента
 +
}
 +
 +
return -k; // Если N_exp = 0 возвращает общее количество экспериментов, в остальных случаях возвращает 0
 
}
 
}
 
}
 
}
Строка 163: Строка 188:
 
Файл '''"FC.html"'''
 
Файл '''"FC.html"'''
 
<source lang="html" first-line="1">
 
<source lang="html" first-line="1">
<!DOCTYPE html>
 
<html>
 
<head>
 
    <meta charset="UTF-8" />
 
    <title>Motion in Central Force Field</title>
 
    <script src="FC.js"></script>
 
</head>
 
<body>
 
 
     <canvas id="canvasGraph" width="600" height="600" style="border:1px solid #000000;"></canvas>
 
     <canvas id="canvasGraph" width="600" height="600" style="border:1px solid #000000;"></canvas>
  
Строка 208: Строка 225:
 
</font>
 
</font>
 
</div>
 
</div>
   
+
    <div>
 +
        <font face= "Times New Roman">
 +
        Номер эксперимента <input id="Text_05" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
 +
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
 +
            if (!this.checkValidity()) return;
 +
            app.set_05(this.value);
 +
            document.getElementById('Slider_05').value = this.value;
 +
        ">
 +
<input type="range" id="Slider_05" style="width: 100px;" oninput="app.set_05(this.value); document.getElementById('Text_05').value = this.value;">
 +
</div>
 +
 
<script type="text/javascript">var app = new MainFC (
 
<script type="text/javascript">var app = new MainFC (
 
document.getElementById('canvasGraph')
 
document.getElementById('canvasGraph')
 
);</script>
 
);</script>
 
</body>
 
</html>
 
 
</source>
 
</source>
 
</toggledisplay>
 
</toggledisplay>
Строка 223: Строка 247:
 
* zoom — логарифмический масштаб отображения графика (используется логарифм по основанию 2).
 
* zoom — логарифмический масштаб отображения графика (используется логарифм по основанию 2).
 
* <math>t_{\rm max}</math> — время интегрирования, выраженное в периодах кругового движения <math>T</math> на начальном удалении от центра.
 
* <math>t_{\rm max}</math> — время интегрирования, выраженное в периодах кругового движения <math>T</math> на начальном удалении от центра.
 +
 +
Кроме того, возможно задать "номер эксперимента". На каждый номер приходится отдельный набор из перечисленных выше четырех параметров, для которого реализуется некоторый характерный вид движения. Эксперименты упорядочены по <math>n</math> (в первую очередь), затем по <math>v_0</math>.

Версия 20:14, 21 мая 2014

Виртуальная лаборатория > Движение материальной точки в центральном поле


Интерактивное приложение, представленное ниже, позволяет изучать траектории материальной точки в центральном степенном поле притяжения. Сила взаимодействия [math]F[/math] является степенной функцией расстояния [math]r[/math]:

[math]F \sim r^n,[/math]

где [math]n[/math] — некоторый вещественный безразмерный показатель степени. Притягивающий центр находиться в точке [math]0[/math].

<addscript src=FC/>

Не удается найти HTML-файл FC_TM.html

Текст приложения на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> Файл "FC.js"

// Движение материальной точки в центральном поле
// Разработчик А.М. Кривцов 
// 18-21.05.2014 
// Интернет: tm.spbstu.ru/FC

function MainFC(canvas) {

    // Основные размерные параметры
    
    const m = 1.;   // масса частицы
    const a = 1.;   // радиус круговой орбиты
    const P = 1.; 	// сила притяжения на круговой орбите

    // Производные размерные параметры  

	const T = 2 * Math.PI * Math.sqrt(m * a / P);	// период движения по круговой орбите
	const v1 = Math.sqrt(P * a / m);				// скорость движения по круговой орбите (1-ая космическая)
	
	// Переменные
	
	var n, v0, zoom, t_max, dt;
	
	// настройка слайдеров 
	
	Slider_01.min = 1;			Slider_01.max = 22;					Slider_01.step = 0.1;		// v0 / v1	- начальная скорость
	Slider_02.max = 6;			Slider_02.min = -Slider_02.max; 	Slider_02.step = 0.01;		// n		- показатель степени	
	Slider_03.min = 0;       	Slider_03.max = 6;					Slider_03.step = 0.01;		// zoom		- увеличение
	Slider_04.min = 0;       	Slider_04.max = 100;				Slider_04.step = 0.1;		// t_max/T	- время расчета	
	Slider_05.min = 1;       	Slider_05.max = set_exp(0);			Slider_05.step = 1;			// N_exp	- номер эксперимента
	
	Slider_05.focus();

	// Задание значений переменных
	
	dt = T / 200;       // шаг интегрирования
	set_exp(6);			// переменные заданы для эксперимента 6

	// Отображение
	
	draw();

    // функции, запускающиеся при изменении значений слайдеров и текстовых полей

    this.set_01 = function(input) { v0 		= Number(input) * v1; 	draw(); }  
    this.set_02 = function(input) { n 		= Number(input); 		draw(); }  
    this.set_03 = function(input) { zoom 	= Number(input); 		draw(); } 
    this.set_04 = function(input) { t_max 	= Number(input) * T; 	draw(); } 	
    this.set_05 = function(input) { set_exp(input);					draw(); } 	
	
	// Отображение
	
	function draw() 
	{ 
		// Оптимизация
		
		var n1 = (1 - n) / 2;
		var dt1 = -P / m * Math.pow(a, -n) * dt;
		
		// Область построения графика
		
		const X_max = canvas.width, Y_max = canvas.height;
		var x_max, y_max, sx, sy, X0, Y0;
	
		x_max = y_max = Math.pow(2, zoom) * a;		// размер области отображения
		x_min = y_min = -x_max;  

		sx = sy = Y_max / (y_max - y_min); 			// масштаб по оси y
		X0 = Y0 = Y_max + y_min * sy;  				// положение 0 оси y в экранных координатах
	   
	   // Инициализация графики
		
		var context = canvas.getContext("2d");  	// на context происходит рисование
		context.clearRect(0, 0, X_max, Y_max); 	// очистить экран
        
        // Горизонтальная ось
        context.strokeStyle = 'lightgrey';
        context.beginPath();
        context.moveTo(0, Y0);	context.lineTo(X_max, Y0);
        context.moveTo(X0, 0);	context.lineTo(X0, Y_max);
        context.moveTo(X0 +  a * sx, Y0);	context.arc(X0, Y0, a * sx, 0, 2 * Math.PI);
        context.stroke();

        // Надписи
        context.fillStyle = 'black';
        context.font = "italic 20px Times";
        context.fillText("0", X0 - 15, Y0 - 7);
		
		// График 
		context.strokeStyle = 'black';
		context.beginPath();
		var vx = v0, vy = 0;
		var x = 0, y = a;
		context.moveTo(X0, Y0 - a * sy);
		for (var t = 0; t < t_max; t += dt)
		{
			var r2 = x * x + y * y;
			var rn = Math.pow(r2, n1);
			vx += x / rn * dt1;
			vy += y / rn * dt1;
			x += vx * dt;			
			y += vy * dt; 
			var X = X0 + x * sx; 
			var Y = Y0 - y * sy; 
			context.lineTo(X, Y);
		}
		context.stroke();			
	}
	
	// Выбор эксперимента
	
	function set_exp(N_exp)
	{	
		var k = Number(N_exp);
		
//			показатель степени	начальная скорость	 увеличение		максимальное число шагов
	
		if (!--k) { n = -3;		v0 = 1.004 * v1; 	zoom = 2.98;	t_max = 17.4 * T; }  	// спираль			
		if (!--k) { n = -2.9;	v0 = 1.023 * v1; 	zoom = 2.98;	t_max = 67.6 * T; }  	 		
		if (!--k) { n = -2.87;	v0 = 1.029 * v1; 	zoom = 2.57;	t_max = 21.6 * T; }  	 		
		if (!--k) { n = -2.87;	v0 = 1.03 * v1; 	zoom = 2.96;	t_max = 94.4 * T; }  	 		
		if (!--k) { n = -2.5;	v0 = 1.135 * v1; 	zoom = 2.98;	t_max = 31.1 * T; }  	// 2

		if (!--k) { n = -2;		v0 = 1.25 * v1; 	zoom = 2;	t_max = 20 * T; }  			// эллипс

		if (!--k) { n = -1;		v0 = 1.25 * v1; 	zoom = 1;		t_max = 26 * T; }
		if (!--k) { n = -1;		v0 = 1.36 * v1; 	zoom = 1.18;	t_max = 10.8 * T; }		// 10
		if (!--k) { n = -1;		v0 = 1.63 * v1; 	zoom = 1.87;	t_max = 25.3 * T; }
		if (!--k) { n = -1;		v0 = 1.93 * v1; 	zoom = 2.8;		t_max = 8 * T; }		//  3 !
		if (!--k) { n = -1;		v0 = 2.31 * v1; 	zoom = 3.92;	t_max = 64.1 * T; }		// 11
		if (!--k) { n = -1;		v0 = 2.43 * v1; 	zoom = 4.29;	t_max = 61.8 * T; }		//  8
		if (!--k) { n = -1;		v0 = 2.74 * v1; 	zoom = 5.5;		t_max = 85.5 * T; }		//  5

		if (!--k) { n = -0.74;	v0 = 2.665 * v1; 	zoom = 3.81;	t_max = 18.8 * T; }		//  5 
		
		if (!--k) { n = 0;		v0 = 1.66 * v1; 	zoom = 1.39;	t_max = 5.1 * T; }		//  7 
		if (!--k) { n = 0;		v0 = 2.7  * v1; 	zoom = 2.34;	t_max = 8.9 * T; }		//  9 
		if (!--k) { n = 0;		v0 = 3.46 * v1; 	zoom = 3.03;	t_max = 13.3 * T; }		// 11 
	
		if (!--k) { n = 1;		v0 = 2 * v1; 		zoom = 1.3;		t_max = 1 * T; }		// 11 	

		if (!--k) { n = 2;		v0 = 2.39 * v1; 	zoom = 1.18;	t_max = 4.0 * T; }		// 11 	
	
		if (!--k) { n = 3;		v0 = 3.58 * v1; 	zoom = 1.28;	t_max = 1.8 * T; }		//  7 
		if (!--k) { n = 3;		v0 = 6.97 * v1; 	zoom = 1.87;	t_max = 1.7 * T; }		//  9
		if (!--k) { n = 3;		v0 = 11.28 * v1; 	zoom = 2.13;	t_max = 1.6 * T; }		// 11 	
		if (!--k) { n = 3;		v0 = 16.13 * v1; 	zoom = 2.50;	t_max = 1.6 * T; }		// 13 	

		if (!--k) { n = 3.29;	v0 = 1.3 * v1; 		zoom = 0.48;	t_max = 1.8 * T; }		// 13 	
		
		if (!--k) { n = 4;		v0 = 3.36 * v1; 	zoom = 1.12;	t_max = 1.1 * T; }		//  5 !	
		if (!--k) { n = 4;		v0 = 6.08 * v1; 	zoom = 1.44;	t_max = 1.9 * T; }		// 12 	
		if (!--k) { n = 4;		v0 = 9.52 * v1; 	zoom = 1.66;	t_max = 0.9 * T; }		//  7 !	
		if (!--k) { n = 4;		v0 = 18.45 * v1; 	zoom = 2.18;	t_max = 0.728 * T; }	//  9	

		if (!--k) { n = 5;		v0 = 7.15 * v1; 	zoom = 1.55;	t_max = 0.6 * T; }		//  5 !	

		if (!--k) { n = 4;		v0 = 3.304 * v1; 	zoom = 1.12;	t_max = 36.4 * T; }		//  5 ~~~
		if (!--k) { n = 4;		v0 = 9.394 * v1; 	zoom = 1.66;	t_max = 19.6 * T; }		//  7 ~~~	

		if (N_exp)
		{
			Text_01.value = v0 / v1; 		Slider_01.value = Text_01.value;		// начальная скорость	    			
			Text_02.value = n;     			Slider_02.value = Text_02.value;        // показатель степени
			Text_03.value = zoom;     		Slider_03.value = Text_03.value;	    // увеличение
			Text_04.value = t_max / T;     	Slider_04.value = Text_04.value;		// время расчета	  			
			Text_05.value = N_exp;          Slider_05.value = Text_05.value;        // номер эксперимента
		}
		
		return -k;	// Если N_exp = 0 возвращает общее количество экспериментов, в остальных случаях возвращает 0 
	}
}

Файл "FC.html"

    <canvas id="canvasGraph" width="600" height="600" style="border:1px solid #000000;"></canvas>

    <!--Установка параметров взаимодействия (текстовые поля и слайдеры)-->
    <div>
        <font face= "Times New Roman"><I>
        v</I><SUB>0</SUB> = <input id="Text_01" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
            if (!this.checkValidity()) return;
            app.set_01(this.value);
            document.getElementById('Slider_01').value = this.value;
        "><I> v</I><SUB>1</SUB> 
		<input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;">
		n = <input id="Text_02" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
            if (!this.checkValidity()) return;
            app.set_02(this.value);
            document.getElementById('Slider_02').value = this.value;
        ">
		<input type="range" id="Slider_02" style="width: 100px;" oninput="app.set_02(this.value); document.getElementById('Text_02').value = this.value;">
		</font>
	</div>
    <div>
        <font face= "Times New Roman">
        zoom = <input id="Text_03" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
            if (!this.checkValidity()) return;
            app.set_03(this.value);
            document.getElementById('Slider_03').value = this.value;
        "> 
		<input type="range" id="Slider_03" style="width: 100px;" oninput="app.set_03(this.value); document.getElementById('Text_03').value = this.value;">
		<I>t</I><SUB>max</SUB> = <input id="Text_04" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
            if (!this.checkValidity()) return;
            app.set_04(this.value);
            document.getElementById('Slider_04').value = this.value;
        "><I> T</I>
		<input type="range" id="Slider_04" style="width: 100px;" oninput="app.set_04(this.value); document.getElementById('Text_04').value = this.value;">
		</font>
	</div>
     <div>
        <font face= "Times New Roman">
        Номер эксперимента <input id="Text_05" style="width: 4.2ex;" required pattern="[-+]?([0-9]*\.[0-9]+|[0-9]+)" oninput="
            // если введено не число - строка не пройдет валидацию по паттерну выше, и checkValidity() вернет false
            if (!this.checkValidity()) return;
            app.set_05(this.value);
            document.getElementById('Slider_05').value = this.value;
        "> 
		<input type="range" id="Slider_05" style="width: 100px;" oninput="app.set_05(this.value); document.getElementById('Text_05').value = this.value;">
	</div>
	
	<script type="text/javascript">var app = new MainFC	(
		document.getElementById('canvasGraph')
	);</script>

</toggledisplay>

Приложение позволяет интерактивно задавать следующие параметры:

  • [math]v_0[/math] — начальная скорость точки. Начальная скорость направлена тангенциально (перпендикулярно радиальному направлению). Скорость измеряется по отношению к [math]v_1[/math] — скорости кругового движения на начальном удалении от центра (1-ая космическая скорость).
  • [math]n[/math] — показатель степени в законе взаимодействия ([math]n=-2[/math] соответствует гравитационному взаимодействию, [math]n=1[/math] — линейной пружине).
  • zoom — логарифмический масштаб отображения графика (используется логарифм по основанию 2).
  • [math]t_{\rm max}[/math] — время интегрирования, выраженное в периодах кругового движения [math]T[/math] на начальном удалении от центра.

Кроме того, возможно задать "номер эксперимента". На каждый номер приходится отдельный набор из перечисленных выше четырех параметров, для которого реализуется некоторый характерный вид движения. Эксперименты упорядочены по [math]n[/math] (в первую очередь), затем по [math]v_0[/math].