Траектория тела, брошенного под углом к горизонту — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
м (Замена текста — «<source lang="(.*)" first-line="(.*)">» на «<syntaxhighlight lang="$1" line start="$2" enclose="div">»)
м (Замена текста — «</source>» на «</syntaxhighligh>»)
Строка 153: Строка 153:
 
     }     
 
     }     
 
}
 
}
</source>
+
</syntaxhighligh>
 
Файл '''"mg.html"'''
 
Файл '''"mg.html"'''
 
<syntaxhighlight lang="html" line start="1" enclose="div">
 
<syntaxhighlight lang="html" line start="1" enclose="div">
Строка 195: Строка 195:
 
</body>
 
</body>
 
</html>  
 
</html>  
</source>
+
</syntaxhighligh>
 
</toggledisplay>
 
</toggledisplay>
  

Версия 18:55, 8 марта 2015

Виртуальная лаборатория > Траектория тела, брошенного под углом к горизонту


Рассмотрим движение материальной точки, брошенной под углом к горизонту в поле силы тяжести. Сопротивление воздуха не учитывается. Уравнение движения рассматриваемой системы и начальные условия имеют вид:

[math] m\ddot{\bf r} = m{\bf g};\qquad \left.\dot{\bf r}\right|_{t=0} = {\bf v}_0,\qquad \left.{\bf r}\right|_{t=0} = 0, [/math]

где [math]m[/math] и [math]{\bf r}[/math] — масса и радиус-вектор материальной точки, [math]m{\bf g}[/math] — сила тяжести, [math]{\bf v}_0[/math] — начальная скорость, [math]t[/math] — время, точкой обозначена производная по времени, векторы выделены жирным шрифтом. Интегрирование уравнения движения по времени с учетом начальных условий дает

[math] {\bf r} = {\bf v}_0\, t + {\bf g}\,\frac{t^2}2. [/math]

Проецируя полученное векторное уравнение на горизонтальную и вертикальную оси [math]x[/math] и [math]y[/math] получим

[math] x = (v_0 \cos\alpha)\,t,\qquad y = (v_0 \sin\alpha)\,t - g\,\frac{t^2}2, [/math]

где [math]\alpha[/math] — угол между направлением начальной скорости и горизонтальным направлением (угол броска). После исключения времени из этих уравнений получим уравнение траектории

[math] y = x\mathop{\rm tg}\alpha - \frac{g}{2v_0^2\cos^2\alpha}\,x^2. [/math]

Таким образом, траектория является параболой, отображенной на интерактивном графике ниже. Сравнивается траектория, соответствующая [math]\alpha = 60^o[/math] и оптимальная траектория, реализующаяся при [math]\alpha = 45^o[/math] и обеспечивающая максимальную дальность броска. Перемещение слайдера позволяет наблюдать влияние угла броска на форму траектории (модуль начальной скорости при этом остается неизменным).


Траектория: актуальная, оптимальная (α = 45˚)
Угол броска: α = ˚
Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> Файл "mg.js" <syntaxhighlight lang="javascript" line start="1" enclose="div"> // Движение тела, брошенного под углом к горизонту // Разработчик А.М. Кривцов // 01.06.2014 // 06.11.2014 коррекция - удаление const (Цветков) // Интернет: tm.spbstu.ru/mg

function MainMG(canvas) {

   // Предварительные установки

var deg = Math.PI / 180; // Угловой градус (degree)

var X_max = canvas.width;

	var Y_max = canvas.height;
   // Размерные параметры
   var g = 1.;    // ускорение свободного падения
   var v0 = 1.;    // начальная скорость
   // Расчет констант 

var h = v0 * v0 / 2 / g;

   // Задание начальных значений параметров

var al = 60 * deg;

// Область построения графика

   var x_min = 0;  
   var x_max = 2 * h;
   var y_min = 0;    
   var y_max = h;      
	var N = X_max;                 	// число точек по оси x

var dx = x_max / N; // шаг по оси x var sx = X_max / x_max; // масштаб по оси x

var sy; // масштаб по оси y var Y0; // положение 0 оси y в экранных координатах var context; // на context происходит рисование

   // настройка слайдеров и текстовых полей
   Text_01.value = Math.round(al / deg);

Slider_01.min = 0;

   Slider_01.max = 90;
   Slider_01.step = 1;
   Slider_01.value = Text_01.value;     	

draw();

   // функция, запускающаяся при перемещении слайдера
   this.set_01 = function(input) { al = input * deg; draw(); }  
   

// Функции, запускающиеся при изменении элементов управления

   this.setCheckbox_01 = function(bool) { draw(); }

this.setCheckbox_02 = function(bool) { draw(); }

// Отображение

function draw() { // Расчет параметров графики

sy = Y_max / (y_max - y_min); // масштаб по оси y Y0 = Y_max + y_min * sy; // положение 0 оси y в экранных координатах

context = canvas.getContext("2d"); // на context происходит рисование context.clearRect(0, 0, X_max, Y_max); // очистить экран

// Графики

Graph(F0, checkbox_02.checked, 'lightgrey'); Graph(F1, checkbox_01.checked, 'black');

       // Надписи
       context.fillStyle = 'black';
       context.font = "italic 20px Times";
       context.fillText("x", x_max * sx - 15, Y0 - 7);
       context.fillText("y", 5, 15);
       context.fillText("0", 10, Y0 - 3);

}

// Построение графика функции

function Graph(F, flag, color) { if (!flag) return;

context.strokeStyle = color; context.beginPath(); for (var x = x_min; x < x_max; x += dx) { var y = F(x); var X = x * sx; var Y = Y0 - y * sy; context.lineTo(X, Y); } context.stroke(); }

   // Траектории
   
   // al = 45 * deg;

function F0(x)

   {

var y = x - g / (v0 * v0) * x * x; return y;

   }    
   // Произвольное al

function F1(x)

   {

var t = x / v0 / Math.cos(al) var y = v0 * Math.sin(al) * t - g * t * t / 2; return y;

   }    

} </syntaxhighligh> Файл "mg.html" <syntaxhighlight lang="html" line start="1" enclose="div"> <!DOCTYPE html> <html> <head>

   <meta charset="UTF-8" />
   <title>mg</title>
   <script src="mg.js"></script>

</head> <body>

   <canvas id="canvasGraph" width="400" height="200" style="border:1px solid #000000;"></canvas>
       Траектория:
       

<input type="checkbox" id="checkbox_01" name="" onchange="app.setCheckbox_01(this.checked);" checked/>актуальная, <input type="checkbox" id="checkbox_02" name="" onchange="app.setCheckbox_02(this.checked);" checked/>оптимальная (α = 45˚)

Угол броска:

       

α = <input id="Text_01" style="width: 2.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;
       ">˚

<input type="range" id="Slider_01" style="width: 100px;" oninput="app.set_01(this.value); document.getElementById('Text_01').value = this.value;">

<script type="text/javascript">var app = new MainMG( document.getElementById('canvasGraph') );</script>

</body> </html> </syntaxhighligh> </toggledisplay>


См. также