Редактирование: Движение материальной точки в центральном поле
Внимание! Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы войдёте или создадите учётную запись, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
− | |||
[[Виртуальная лаборатория]] > [[Движение материальной точки в центральном поле]] <HR> | [[Виртуальная лаборатория]] > [[Движение материальной точки в центральном поле]] <HR> | ||
− | |||
− | + | Интерактивный график ниже позволяет изучать траектории материальной точки в центральном поле притяжения, для которого сила взаимодействия <math>F</math> является степенной функцией расстояния <math>r</math>: | |
:<math>F \sim r^n,</math> | :<math>F \sim r^n,</math> | ||
− | где <math>n</math> — некоторый вещественный безразмерный показатель степени. Притягивающий центр | + | где <math>n</math> — некоторый вещественный безразмерный показатель степени. Притягивающий центр находиться в точке <math>0</math>. |
+ | <addscript src=FC/> | ||
+ | <htmlet nocache="yes">FC_TM</htmlet> | ||
− | < | + | Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> |
− | |||
− | |||
− | |||
Файл '''"FC.js"''' | Файл '''"FC.js"''' | ||
− | < | + | <source lang="javascript" first-line="1"> |
// Движение материальной точки в центральном поле | // Движение материальной точки в центральном поле | ||
// Разработчик А.М. Кривцов | // Разработчик А.М. Кривцов | ||
− | // 18 | + | // 18.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.; // масса частицы | ||
Строка 30: | Строка 32: | ||
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 x_min, x_max, sx, X0; | ||
+ | var y_min, y_max, sy, Y0; | ||
+ | |||
+ | // Задание начальных значений параметров | ||
− | var | + | 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.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; | |
− | + | Slider_03.max = 6; | |
− | + | Slider_03.step = 0.01; | |
+ | Slider_03.value = zoom; | ||
+ | Slider_03.value = 2; | ||
+ | Text_03.value = Slider_03.value; | ||
− | + | Slider_04.min = 1; | |
− | + | 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 | + | this.set_01 = function(input) { v0 = Number(input) * v1; draw(); } |
− | this.set_02 = function(input) { | + | this.set_02 = function(input) { set_n(input); draw(); } |
− | this.set_03 = function(input) { | + | this.set_03 = function(input) { set_zoom(input); draw(); } |
− | this.set_04 = function(input) { t_max | + | this.set_04 = function(input) { t_max = Number(input) * T; 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 происходит рисование | |
context.clearRect(0, 0, X_max, Y_max); // очистить экран | context.clearRect(0, 0, X_max, Y_max); // очистить экран | ||
Строка 104: | Строка 137: | ||
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; |
− | var x = 0 | + | var vy = 0; |
+ | 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; | ||
Строка 123: | Строка 158: | ||
} | } | ||
context.stroke(); | context.stroke(); | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
− | </ | + | </source> |
Файл '''"FC.html"''' | Файл '''"FC.html"''' | ||
− | < | + | <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> | ||
Строка 228: | Строка 208: | ||
</font> | </font> | ||
</div> | </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> | ||
+ | </toggledisplay> | ||
Приложение позволяет интерактивно задавать следующие параметры: | Приложение позволяет интерактивно задавать следующие параметры: | ||
* <math>v_0</math> — начальная скорость точки. Начальная скорость направлена тангенциально (перпендикулярно радиальному направлению). Скорость измеряется по отношению к <math>v_1</math> — скорости кругового движения на начальном удалении от центра (1-ая космическая скорость). | * <math>v_0</math> — начальная скорость точки. Начальная скорость направлена тангенциально (перпендикулярно радиальному направлению). Скорость измеряется по отношению к <math>v_1</math> — скорости кругового движения на начальном удалении от центра (1-ая космическая скорость). | ||
− | * <math>n</math> — показатель степени в законе взаимодействия (<math>n=-2</math> соответствует гравитационному взаимодействию, <math>n=1</math> — | + | * <math>n</math> — показатель степени в законе взаимодействия (<math>n=-2</math> соответствует гравитационному взаимодействию, <math>n=1</math> — линейной пружине). |
* zoom — логарифмический масштаб отображения графика (используется логарифм по основанию 2). | * zoom — логарифмический масштаб отображения графика (используется логарифм по основанию 2). | ||
* <math>t_{\rm max}</math> — время интегрирования, выраженное в периодах кругового движения <math>T</math> на начальном удалении от центра. | * <math>t_{\rm max}</math> — время интегрирования, выраженное в периодах кругового движения <math>T</math> на начальном удалении от центра. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |