Моделирование движения неуправляемого снаряда при бомбометании Колонна военной техники условного противника движется по прямолин. Лабораторная работа 7 Основы работы в среде разработки Microsoft Visual Studio 2022 Постановка задачи
Скачать 109.75 Kb.
|
Лабораторная работа №7 Основы работы в среде разработки Microsoft Visual Studio 2022 Постановка задачи. Моделирование движения неуправляемого снаряда при бомбометании Колонна военной техники условного противника движется по прямолинейному участку шоссе со скоростью к v км/ч. Колонну догоняет самолет-бомбардировщик, движущийся горизонтально над шоссе на высоте H м со скоростью c v км/ч. Стремясь поразить колонну, самолет сбрасывает на цель неуправляемый снаряд (бомбу) массой m кг. Считать, что при движении снаряда в вертикальном направлении он испытывает сопротивление воздуха. При этом сила сопротивления равна: Fс = k1v + k2v2, где v – проекция скорости на вертикальную ось (направление падения снаряда). Считать, что при движении в горизонтальном направлении (направлении движения самолета) лобовым сопротивлением воздуха на снаряд можно пренебречь. Числовые значения величин, характеризующих моделируемый процесс движения снаряда принять равными: k1 = 0,2 + 0,1p; k2 = 0,04 + 0,01p; H = 5(20 + 2p + q)2 м; m = 200 + 20p +10q кг; vc = 600 + 2 p + 4q км/ч; vк = 60 + p + q км/ч. Задача 1. Определить траекторию движения снаряда при бомбометании. Задача 2. На каком расстоянии l до колонны необходимо сбросить снаряд, чтобы поразить цель. Значения p и q равны 1 и 2 соответственно. Описание решения. Задача 1 Составил код для решения задачи 1. Задача 2 Составил код для решения задачи 2. Скриншоты визуальной части программы оставлены ниже: Рис. 1 – Скриншот результата работы программы Листинг кода using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BlokhinLab7 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void resultButton_Click(object sender, EventArgs e) { double p = Convert.ToDouble(pValue.Value); double q = Convert.ToDouble(qValue.Value); double k1 = 0.2 + 0.1 * p; double k2 = 0.04 + 0.01 * p; double H = 5 * ((20 + 2 * p + q) * (20 + 2 * p + q)); double m = 200 + 20 * p + 10 * q; double Vc = ((600 + 2 * p + 4 * q) * 1000) / 3600; double Vk = ((60 + p + q) * 1000) / 3600; double tau = 0.2; double g = 9.81; chart1.Series.Clear(); chart2.Series.Clear(); chart1.Series.Add("Траектория движения самолета"); chart2.Series.Add("Траектория падения снаряда"); chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series[0].Color = Color.Red; chart2.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart2.Series[0].Color = Color.Red; CalculateTrajectory(k1, k2, H, m, Vc, Vk, tau, g); } double CalculateTime(double t1, double h1, double t2, double h2) { double tp = t1 - (t2 - t1) * h1 / (h2 - h1); return tp; } void CalculateTrajectory(double k1, double k2, double H, double m, double vc, double vk, double tau, double g) { // координата снаряда double x = 0; // скорость снаряда double v = 0; // координата самолета double y = 0; // высота снаряда double h = H; // время движения снаряда double t = 0; // время падения снаряда double tp = 0; // шапка таблицы StringBuilder str = new StringBuilder(); str.Append("t"); str.Append('\t'); str.Append("v"); str.Append('\t'); str.Append("x(t)"); str.Append('\t'); str.Append("y(t)"); str.Append('\t'); str.Append("h"); str.AppendLine(); // начальные значения str.Append(t.ToString("F2")); str.Append('\t'); str.Append(v.ToString("F2")); str.Append('\t'); str.Append(x.ToString("F2")); str.Append('\t'); str.Append(y.ToString("F2")); str.Append('\t'); str.Append(h.ToString("F2")); str.AppendLine(); // основной цикл while (h > 0) { // расчет скорости v = v + tau * (g - (k1 * v + k2 * v * v) / m); // расчет координаты x = x + tau * v; if ((H - x) <= 0) { // если высота получилось отрицательной, то // выполняем расчет момента времени падения снаряда tp = CalculateTime(t, h, t + tau, H - x); } // расчет высоты h = H - x; // расчет времени t += tau; // расчет координаты самолета y = vc * t; // формирование значений таблицы str.Append(t.ToString("F2")); str.Append('\t'); str.Append(v.ToString("F2")); str.Append('\t'); str.Append(x.ToString("F2")); str.Append('\t'); str.Append(y.ToString("F2")); str.Append('\t'); str.Append(h.ToString("F2")); str.AppendLine(); chart1.Series[0].Points.AddXY(Math.Ceiling(x), y); chart2.Series[0].Points.AddXY(Math.Ceiling(v), h); } // величина упреждения при бомбометании double l = (vc - vk) * tp; str.AppendLine(); str.Append("Время падения снаряда tп = "); str.Append(tp.ToString("F2")); str.Append(" , c,"); str.AppendLine(); str.Append("Величина упреждения при бомбометании l = "); str.Append(l.ToString("F2")); str.Append(" , м"); str.AppendLine(); resultTextBox.Text = str.ToString(); } } } |