Реализовать движение футбольного мяча после удара - Pascal ABC
Формулировка задачи:
Написать программу, реализующую движение футбольного мяча после удара(задается начальное положение мяча и вектор скорости) в процессе полета мяч ударяется об пол, потолок и стены теряя при каждом ударе часть энергии
Решение задачи: «Реализовать движение футбольного мяча после удара»
textual
Листинг программы
uses crt,graphABC; const r=20; var x,y,d,dx,dy,v,z:integer; u:real; begin repeat write('Введите координату х от ',2*r,' до ',windowwidth -r,' x='); readln(x); until (x>=2*r)and(x<=windowwidth-r); repeat write('Введите координату y от ',windowheight-5*r,' до ',windowheight-r,' y='); readln(y);//ближе к полу until (y>=windowheight-5*r)and(y<=windowheight-r); writeln('Вектор скорости:'); repeat write('Введите направление, угол от 0 до 360 градусов u='); readln(u); until(u>=0)and(u<=360); repeat write('Введите начальную скорость в пикселях/секунду от 500 до 1000 v='); readln(v); until (v>=500)and(v<=1000); clrscr; hidecursor; u:=u*pi/180; //угол в радианах d:=5;//шаг z:=round(1000/v*d) ;//задержка перерисовки dx:=round(d*cos(u)); //шаг по Х dy:=-round(d*sin(u)); //шаг по Y circle(x,y,r); lockdrawing; repeat clearwindow; circle(x,y,r); delay(z); x:=x+dx; //перемещаем y:=y+dy; if (x-r<=0)or(x+r>=windowwidth) then //левая или правая стенки begin dx:=-dx; //смена направления по Х z:=z+10; //увеличение задержки end; if (y-r<=0)or(y+r>=windowheight)then//потолок и пол begin dy:=-dy;//смена направления по Y z:=z+10;//увеличение задержки end; redraw; if z>100 then begin dx:=0; dy:=5; end; until (z>50)and(y>=windowheight-r); end.
Объяснение кода листинга программы
- Создается переменная
r
со значением 20. - Создаются переменные
x
,y
,d
,dx
,dy
,v
,z
со значениями типаinteger
. - Создается переменная
u
со значением типаreal
. - Используется функция
readln()
для чтения координатx
иy
с консоли. - Используется функция
clrscr()
иhidecursor()
для очистки экрана и скрытия курсора. - Вычисляется угол
u
в радианах. - Задается значение
d
равное 5. - Задается значение
z
равное округленному значению(1000/v)*d
. Это будет задержка перерисовки. - Вычисляются значения
dx
иdy
по формулеdx=round(d*cos(u))
иdy=round(d*sin(u))
соответственно. Это шаги по осям X и Y. - Вычисляется значение
r
округляется до ближайшего целого числа. - Используется функция
circle(x,y,r)
для рисования окружности с центром в точке(x,y)
и радиусомr
. - Используется функция
clearwindow()
для очистки окна. - Используется функция
delay(z)
для задержки перерисовки. - Вычисляется новое значение
x
какx+dx
. - Вычисляется новое значение
y
какy+dy
. - Проверяется условие
if (x-r<=0)or(x+r>=windowwidth)
для проверки границ по оси X. Если условие истинно, то меняется направление по оси X с помощьюdx=-dx
. Также увеличивается задержка перерисовкиz
. - Проверяется условие
if (y-r<=0)or(y+r>=windowheight)
для проверки границ по оси Y. Если условие истинно, то меняется направление по оси Y с помощьюdy=-dy
. Также увеличивается задержка перерисовкиz
. - Вызывается функция
redraw()
для перерисовки окна. - Проверяется условие
if z>100
для проверки, если задержка перерисовки превысила 100 миллисекунд. Если условие истинно, то устанавливаются значенияdx
иdy
равными нулю иy
равным 5. Это будет означать выход из цикла. - Останавливается выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д