Найти траекторию движения собаки - Turbo Pascal
Формулировка задачи:
Буду краток. Есть задача:"В точке плоскости с координатами (0, 0) находится собака, в точке Z0 - заяц. С момента времени t=0, заяц бежит все время вдоль линии L(x) с постоянной скоростью 5 м/с. Cобака преследует зайца так, что всегда бежит по направлению прямой, соединяющей в данный момент собаку и зайца. Найти траекторию движения собаки, если скорость собаки 10 м/с. Для решения считать, что собака меняет направление бега не постоянно, а в некоторые моменты времени, в соответствии с положением зайца в этот момент. Между этими моментами – бежит по прямой.
L=100+x"
Вот код "на скорую руку".
Я знаю, что чего-то не хватает. А точнее, меня смущает цикл. Что тут нужно подправить, не подскажете?
Решение задачи: «Найти траекторию движения собаки»
textual
Листинг программы
program sobaka_zayac; uses crt; type point = record x,y: real; end; const vz = 5; vs = 10; var S,Z: point; a, dt: real; vzx, vzy, vsx, vsy: real; k, b: real; begin clrscr; vzx := vz/sqrt(2); vzy := vz/sqrt(2); write('dT = '); readln(dt); z.x:= 0; z.y:= 100; s.x := 0; s.y := 0; k := dt*vs; b := s.y - k*s.x; a := arctan(k); vsx := vs * cos(a); vsy := vs * sin(a); while (z.x>s.x) or (z.y > s.y) do begin s.x := s.x + dt*vsx; s.y := s.y + dt*vsy; z.x := z.x + dt*vzx; z.y := z.y + dt*vzy; k := (z.y-s.y)/(z.x-s.x); b := s.y - k*s.x; a := arctan(k); vsx := vs * cos(a); vsy := vs * sin(a); end; writeln; writeln('Dognal v tochke: (',s.x:0:2,'; ',s.y:0:2,')'); readln; end.
Объяснение кода листинга программы
- Программа называется
sobaka_zayac
. - Используется библиотека crt.
- Тип
point
представляет собой запись с двумя полями:x
иy
типаreal
. - Константа
vz
равна 5. - Константа
vs
равна 10. - Переменные
S
иZ
представляют собой точки, которые используются для вычисления траектории движения собаки. - Переменные
a
,dt
имеют типreal
. - Переменные
vzx
,vzy
,vsx
,vsy
представляют собой коэффициенты, используемые для вычисления траектории движения собаки. - Переменная
k
используется для вычисления угла между направлениями векторовs
иz
. - Переменная
b
используется для вычисления смещенияs
относительноz
. - Переменная
a
используется для вычисления угла между направлениями векторовs
иz
. - В цикле while происходит вычисление новых координат точек
s
иz
на основе предыдущих координат и времениdt
. - Выводится информация о текущем положении собаки.
- Программа завершается после того, как точка
z
пересекает точкуs
в направлении, противоположном направлению вектораs
.