Игра "Пушечная дуэль"; Записать уравнение движение тела, брошенного под углом к горизонту - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Не получается записать уравнение движение тела, брошенного под углом к горизонту, чтобы рассчитать траекторию полета ядра.Пока возникли трудности только здесь. Можно пожалуйста хотя бы пример какой нибудь формулы?

Решение задачи: «Игра "Пушечная дуэль"; Записать уравнение движение тела, брошенного под углом к горизонту»

textual
Листинг программы
uses
  graphABC;
 
function F(alfa, v0, x: real): real;
begin
  f := x*sin(alfa)/cos(alfa)-9.81*x*x/(2*sqr(v0*cos(alfa)));
end;
 
var
  alfa, V0, a, b, x, mx, my, dx, n, dy, fmin, fmax: real;
  Q, x0, y0, i, x1, y: integer;
 
begin
  alfa := 80; v0 := 40; //начальные данные
  alfa := pi * alfa / 180;
  SetWindowSize(600, 600);
  Q := WindowWidth - 100;
  a := 0; b := 80; dx := 10;
  fmin := 0; fmax := 80; dy := 10;
  mx := (windowwidth - 100) / (b - a); //масштаб по Х
  my := (windowheight - 100) / (fmax - fmin); //масштаб по Y
  x0 := 50; //начало координат
  y0 := trunc(abs(fmax) * my) + 50; //начало координат
  Line(10, y0, WindowWidth - 10, y0);  //OX
  Line(x0, 10, x0, WindowHeight - 10); //OY
  SetFontColor(clRed);
  TextOut(WindowWidth - 20, y0 + 10, 'X');
  TextOut(x0 + 5, 10, 'Y');
  SetFontColor(clBlue);
  { Засечки на оси OX: }
  for i := 1 to round((b - a) / dx) + 1 do 
  begin
    x1 := 50 + trunc((i - 1) * Mx * dx);
    Line(x1, y0 - 3, x1, y0 + 3); //рисуем засечки на оси OX
    n := a + (i - 1) * dx;
    if N <> 0 then TextOut(x1 - 5, y0 + 10, FloatToStr(n));
  end;
  { Засечки на оси OY: }
  for i := 1 to round((fmax - fmin) / dy) + 1 do 
  begin
    y := windowheight - 50 - trunc((i - 1) * My * dy);
    Line(x0 - 3, y, x0 + 3, y); //рисуем засечки на оси Oy
    n := fmin + (i - 1) * dy;
    if N <> 0  then TextOut(x0 + 7, y - 8, FloatToStr(n));
  end;
  SetPenColor(clGreen);
  SetPenWidth(3);
  i := 0;
  while y <= y0 do begin
    x := a + (b - a) * i / Q;
    y := y0 - trunc(my * f(alfa, v0, x));
    if x = a then MoveTo(x0 + trunc(mx * x), y)
    else LineTo(x0 + trunc(mx * x), y);
    sleep(20); //скорость падения
    inc(i)
  end
end.

Объяснение кода листинга программы

  1. В функции F(alfa, v0, x) вычисляется значение силы, действующей на тело, брошенное под углом к горизонту.
  2. Переменные alfa, v0, a, b, x, mx, my, dx, n, dy, fmin, fmax определяются и инициализируются.
  3. Устанавливается размер окна графического интерфейса.
  4. Вычисляется масштаб по оси X и Y.
  5. Определяются начальные координаты для текста и линий.
  6. Засечки на оси OX рисуются с помощью функции Line и TextOut.
  7. Засечки на оси OY рисуются с помощью функции Line и TextOut.
  8. Рисуется траектория движения тела с помощью цикла while.
  9. Переменная i увеличивается на единицу после каждого шага цикла.
  10. Значение x и y вычисляется на каждом шаге цикла.
  11. Если x равно a (начальное значение), то перемещаемся к точке (x0, y0).
  12. Иначе, рисуем линию от предыдущей точки до текущей.
  13. Спящий интервал (sleep(20)) используется для создания эффекта замедления движения.
  14. Переменная i увеличивается на единицу после каждого цикла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы