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

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
м (Замена текста — «<addscript(.*)src=(.*)>» на «»)
Строка 29: Строка 29:
 
Таким образом, траектория является параболой, отображенной на интерактивном графике ниже. Сравнивается траектория, соответствующая <math>\alpha = 60^o</math> и оптимальная траектория, реализующаяся при <math>\alpha = 45^o</math> и обеспечивающая максимальную дальность броска. Перемещение слайдера позволяет наблюдать влияние угла броска на форму траектории (модуль начальной скорости при этом остается неизменным).   
 
Таким образом, траектория является параболой, отображенной на интерактивном графике ниже. Сравнивается траектория, соответствующая <math>\alpha = 60^o</math> и оптимальная траектория, реализующаяся при <math>\alpha = 45^o</math> и обеспечивающая максимальную дальность броска. Перемещение слайдера позволяет наблюдать влияние угла броска на форму траектории (модуль начальной скорости при этом остается неизменным).   
  
<addscript src=Krivtsov/mg/>
+
 
 
<htmlet nocache="yes">Krivtsov/mg_TM</htmlet>
 
<htmlet nocache="yes">Krivtsov/mg_TM</htmlet>
 
Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  
 
Текст программы построения графиков на языке JavaScript: <toggledisplay status=hide showtext="Показать↓" hidetext="Скрыть↑" linkstyle="font-size:default">  

Версия 18:45, 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"

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


См. также