Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача с физикой

Автор: MSDDV 2.06.2005 8:53

Блин есть задачка а я даже зацепиться не могу с чего начать,
может кто знает или видел....

«Кривая погони». В точке Р находится собака, а в точке Q.—заяц. Расстояние от Р до Q равно 100 м
Заяц бежит вдоль прямой L, образующей угол 45° с отрезком РQ, с постоянной скоростью 5 м/с. Собака бежит все время в направлении зайца со скоростью 10 м/с. Найти траекторию движения собаки в течение 10 с. Для приближенного решения предлагается заменить кривую ломаной линией. Считается, что в первую секунду заяц обегает отрезок QQ', собака — РР', во вторую секунду заяц пробегает отрезок Q'Q" и т. д.; собака принимает решение о направлении погони ровно один раз в секунду

Автор: hiv 2.06.2005 18:38

Вот http://forum.pascal.net.ru/index.php?showtopic=5236# видел.

Автор: volvo 2.06.2005 20:06

{$n+}
uses graph;

const
dT = 1;
Vz = 5;
Vs = 10;

type
TPoint = record
X, Y: double;
end;

procedure ShowPoint(P: TPoint; color: integer);
begin
setcolor(color);
Circle(Trunc(P.X), Trunc(P.Y), 2);
end;

var
Pz, Ps: TPoint;

var
dx, dy, r: double;
gd, gm: integer;
i: integer;

begin
gd := detect;
initgraph(gd, gm, '');
if graphresult <> grok then begin
writeln('Error...'); halt(100)
end;

Pz.X := 0; Pz.Y := GetMaxY;
Ps.X := 400; Ps.Y := GetMaxY;

for i := 1 to 30 do begin
Pz.X := Pz.X + (Vz * dT * sin(45*Pi/180));
Pz.Y := Pz.Y - (Vz * dT * sin(45*Pi/180));
ShowPoint(Pz, white);

dx := Pz.X - Ps.X;
dy := Pz.Y - Ps.Y;
r := sqrt(sqr(dx)+sqr(dy));

Ps.X := Ps.X + dx * Vs * dT / r;
Ps.Y := Ps.Y + dy * Vs * dT / r;
ShowPoint(Ps, red);
end;
readln;

closegraph;

end.

Чего не понятно - спрашивай :yes:

Автор: MSDDV 3.06.2005 10:42

вроде замысел понят, но нужен вывод на экран ломаной линии траектории

Автор: Digitalator 4.06.2005 0:42

Вот смотри прогу, все входные данные содержаться в const, подогнать под твои условия будет не сложно :yes:


Прикрепленные файлы
Прикрепленный файл  dog_vs_rabbit.pas ( 4.15 килобайт ) Кол-во скачиваний: 323

Автор: MSDDV 11.06.2005 16:07

Блин подогнал код Digitalator, но препод сказал :nono: сделать попроще,
я тут начал, но не могу понять, как вывести ломаную траектории пути собаки blink.gif
вот, что я наделал :low:


Program Z_774;

Uses graph,
crt;
Const
shz = 50;
shs = 100;

Var
gd, gm: integer;
i: integer;

Begin
gd := detect;
initgraph(gd, gm, 'D:\bp\bgi');

if graphresult <> grok
then
begin
writeln('Error...'); halt(100)
end;


{Line (50,250,50,370);
Line (50,370,300,370);}
SetColor (white);
OutTextXY (10,242, 'Старт собаки');
Circle (20,258,2);
SetColor (yellow);
OutTextXY (130,385, 'Старт зайца');
Circle (132,370,2);


SetColor (Green);
Line (20,258,132,370);
ReadLn;

while i <> 10 do
begin
i := i + 1;
Circle (132+shz*i,370,2);
Line (132,370,132+shz*i,370);
ReadLn;
end;
closegraph;

End.


Автор: volvo 11.06.2005 16:30

Ну неужели было ТАК сложно поменять несколько строк в моей программе, чтобы вывод был такой, как тебе нужно (ломаная линия траектории), а не такой как у меня (точечный вывод траектории) ??? Прикрепленный файл  SOBAKA.PAS ( 1.01 килобайт ) Кол-во скачиваний: 569


Добавляй свои "Старт зайца" (в левом нижнем углу экрана) и "Старт собаки" (в середине внизу экрана), и проверяй...

Автор: MSDDV 11.06.2005 20:20

Траектория зайца должна быть вдоль оси OX, а в твоей программе траектория зайца под углом. В моей задаче вывод траектории должен быть посекундный, то есть, например, при нажатии enter происходит вывод на экран одну часть траектории зайца и собаки и делает отметку на траектории, в моём случае кружок. Всего этот процесс состоит из 10 таких кусков, то есть при таких условиях задачи собака догоняет зайца за 10 секунд, а значит ломаная будет состоять из 10 прямых. Вот что мне нужно. :yes:

Автор: volvo 11.06.2005 20:35

Цитата
Траектория зайца должна быть вдоль оси OX, а в твоей программе траектория зайца под углом. В моей задаче вывод траектории должен быть посекундный, то есть, например, при нажатии enter происходит вывод на экран одну часть траектории зайца и собаки и делает отметку на траектории, в моём случае кружок. Всего этот процесс состоит из 10 таких кусков, то есть при таких условиях задачи собака догоняет зайца за 10 секунд, а значит ломаная будет состоять из 10 прямых. Вот что мне нужно.
Так вот если ЭТО тебе нужно, то почему обо ВСЕМ ЭТОМ нет ни слова в первоначальном задании??? angry.gif Телепатов ищещь?

Автор: MSDDV 11.06.2005 21:39

Просто эти изменения дал мне препод только сегодня, после того, как я ему показал код :low: Digitalator'a
Прощу прощения за свой поступок и вправду убил всем столько времени
:molitva: сорри :molitva:

Автор: MSDDV 12.06.2005 23:48

Volvo если не трудно до доделай пожалуйста :molitva: задачу по моему коду

Автор: MSDDV 13.06.2005 16:46

Хелп завтра сдача
Прошу помощи :molitva:

Автор: MSDDV 14.06.2005 1:17

А-А-А-А :o до сдачи семь Часов!!!!
Help me Please
:molitva: :molitva:

Автор: MSDDV 14.06.2005 2:45

Пожалуйста кто-нибудь помогите доделать задачу по моему коду
Program Z_774


До сдачи 5 часов

Автор: Lina 2.06.2008 21:21

А нет ни у кого этой задачи решённой с последним условием:

Цитата
Траектория зайца должна быть вдоль оси OX, а в твоей программе траектория зайца под углом. В моей задаче вывод траектории должен быть посекундный, то есть, например, при нажатии enter происходит вывод на экран одну часть траектории зайца и собаки и делает отметку на траектории, в моём случае кружок. Всего этот процесс состоит из 10 таких кусков, то есть при таких условиях задачи собака догоняет зайца за 10 секунд, а значит ломаная будет состоять из 10 прямых. Вот что мне нужно.

?