Найти траекторию движения собаки - 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.

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

  1. Программа называется sobaka_zayac.
  2. Используется библиотека crt.
  3. Тип point представляет собой запись с двумя полями: x и y типа real.
  4. Константа vz равна 5.
  5. Константа vs равна 10.
  6. Переменные S и Z представляют собой точки, которые используются для вычисления траектории движения собаки.
  7. Переменные a, dt имеют тип real.
  8. Переменные vzx, vzy, vsx, vsy представляют собой коэффициенты, используемые для вычисления траектории движения собаки.
  9. Переменная k используется для вычисления угла между направлениями векторов s и z.
  10. Переменная b используется для вычисления смещения s относительно z.
  11. Переменная a используется для вычисления угла между направлениями векторов s и z.
  12. В цикле while происходит вычисление новых координат точек s и z на основе предыдущих координат и времени dt.
  13. Выводится информация о текущем положении собаки.
  14. Программа завершается после того, как точка z пересекает точку s в направлении, противоположном направлению вектора s.

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

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