Моделирование движения тела в поле тяжести с учетом силы сопротивления

17 сентября 2018 - Администратор

Компьютерное моделирование полета тела в поле тяжести с учетом сопротивления воздуха

В данной статье мы разберем задачу моделирование полета тела в поле тяжести земли с учетом сопротивления воздуха. Приведем пример программы для анимации полета тела в поле тяжести земли с учетом силы сопротивления воздуха
В этой задаче как и ранеее будем разбивать интервал времени на равные промежутки и решать задачу моделирования полета для каждого промежутка времени
t = dt * n, где n – кол-во интервалов, а dt – интервал приращения времени.
Будем считать, что в течение этого временного промежутка, силы не меняются. Тогда можно записать второй закон Ньютона:

второй закон ньютона

 

Отсюда можно выразить ускорение:

ускорение

 

Зная ускорение, можно вычислить мгновенную скорость по формуле:

скорость

 

Координату можно вычислить по уравнению ускоренного движения:

координата

 

Разберём задачу движения тела, подброшенного вверх с учётом сопротивления воздуха.
На тело действует сила тяжести, направленная вниз и сила сопротивления, направленная всегда против движения:

сила тяжести

Сила сопротивления направлена всегда против движения:

сила сопротивления

Тело подбрасывается вверх со скоростью v0  

Тогда из второго закона Ньютона можно выразить ускорение из кинематических уравнений для ускоренного движения можно выразить скорость, и координату y

В компьютерной программе на си для анимации полета тела  производятся итерации, для каждой итерации рассчитываются сила сопротивление, ускорение, скорость, координата. Круг отображается на экране и через небольшую паузу стирается для анимации движения. Подробнее об анимации в си

Задание :

Нарисовать  цель  на определенной высоте в виде горизонтальной линии. Написать программу, которая методом перебора ищет минимальную начальную скорость,   при которой  тело достигает заданной высоты. Отобразить решение на экране.

Код программы на си для полета тела с учетом сопротивления:

#include <graphics.h>
#include <math.h>
const float k = 10; // коэффициент для ускорения отображения.
main()
{
float s = 0.00001; // коэффициент сопротивления.
float g = 100;   // ускорение свободного падения на Земле.
float m = 0.00001;     // масса мяча.
float v0 = 100;    // скорость, с которой подбрасывается мяч.
float Fc; // сила сопротивления воздуха.
float dt = 0.001; // маленький интервал времени.
float a; // ускорение.
float v; // скорость.
float t; // время.
float h; // высота.
float hmax = 0; // максимальная высота (шар может вылететь за пределы экрана).
float R = 1; // радиус мяча, который мы подбрасываем.
int xk, yk; // координтаы тела на экране
initwindow ( 800, 600 );
v=v0; // задаём скорость, с который подбрасявается мяч.
t=0; // начлаьное время
h=0; // высота
xk=400; // абсцисса шара
while ( h >= 0 ) {
yk=590 - h * k; // меняем ординату шара каждую итерацию.
setcolor ( WHITE ); 
circle ( xk, yk, 10 ); // каждую итерацию (каждый кадр) рисуем белый круг.
delay ( 1 ); // время показа кадра.
setcolor ( BLACK );
circle ( xk, yk, 10 ); // стираем круг.
Fc=-s*R*v; // рассчитываем силу сопротивления воздуха.
a=Fc/m-g; // рассчитываем ускорение шара для каждого нового кадра.
h=h+v*dt+a*dt*dt/2; // рассчитываем высоту шара для каждого нового кадра.
v=v+a*dt; // рассчитываем скорость шара для каждого нового кадра.
t=t+dt; // продвигаемся по оси времени.
if ( h > hmax ) hmax = h;
}
closegraph();
// вывод максимальной высоты, скорости и времени подъёма
printf("максимальная высота H=%f", hmax);
getch();
}

Вернуться к содержанию Перейти к следующему уроку Полет под углом к горизонту с учетом сопротивления воздуха

 

Комментарии (0)

Нет комментариев. Ваш будет первым!