Игра "Пушечная дуэль"; Записать уравнение движение тела, брошенного под углом к горизонту - 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.
Объяснение кода листинга программы
- В функции F(alfa, v0, x) вычисляется значение силы, действующей на тело, брошенное под углом к горизонту.
- Переменные alfa, v0, a, b, x, mx, my, dx, n, dy, fmin, fmax определяются и инициализируются.
- Устанавливается размер окна графического интерфейса.
- Вычисляется масштаб по оси X и Y.
- Определяются начальные координаты для текста и линий.
- Засечки на оси OX рисуются с помощью функции Line и TextOut.
- Засечки на оси OY рисуются с помощью функции Line и TextOut.
- Рисуется траектория движения тела с помощью цикла while.
- Переменная i увеличивается на единицу после каждого шага цикла.
- Значение x и y вычисляется на каждом шаге цикла.
- Если x равно a (начальное значение), то перемещаемся к точке (x0, y0).
- Иначе, рисуем линию от предыдущей точки до текущей.
- Спящий интервал (sleep(20)) используется для создания эффекта замедления движения.
- Переменная i увеличивается на единицу после каждого цикла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д