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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
Виртуальная лаборатория > Траектория тела, брошенного под углом к горизонту


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

[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] и обеспечивающая максимальную дальность броска. Перемещение слайдера позволяет наблюдать влияние угла броска на форму траектории (модуль начальной скорости при этом остается неизменным).

<addscript src=Krivtsov/mg/>

Траектория: актуальная, оптимальная (α = 45˚)
Угол броска: α = ˚
Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default"> Файл "mg.js"

// Движение тела, брошенного под углом к горизонту
// Разработчик А.М. Кривцов 
// 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;
    }    
}

Файл "mg.html"

<!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>

 	<!--Выбор графика (чекбоксы)-->
	<div>
        Траектория:
        <font color="#000000" size="5"><B></B></font>
		<input type="checkbox" id="checkbox_01" name="" onchange="app.setCheckbox_01(this.checked);" checked/>актуальная,
		<font color="CCCCCC" size="5"><B></B></font>
		<input type="checkbox" id="checkbox_02" name="" onchange="app.setCheckbox_02(this.checked);" checked/>оптимальная (<I>α</I> = 45˚)
    </div>	

    <!--Установка параметров взаимодействия (текстовые поля и слайдеры)-->
    <div>
		Угол броска:
        <font face= "Times New Roman">
		<I>α</I> = <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;">
		</font>
	</div>
    
	<script type="text/javascript">var app = new MainMG(
		document.getElementById('canvasGraph')
	);</script>

</body>
</html>

</toggledisplay>


См. также