Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.73.125] |
|
Сообщ.
#1
,
|
|
|
Народ! Помогите, плиз, что-то я никак не соображу...
Дано: Самолёт, летящий на высоте h с постоянной скоростью v. Ракета, летящая с земли с ускорением a. Местоположение ракеты всегда на прямой, проходящей через две точки: ракетную установку и самолёт Начальное расстояние по горизонтали между самолётом и ракетной установкой = d0. Найти: Координаты ракеты в момент времени t (начало координат в месте расположения ракетной установки). Решение: (что у меня получается) Путь, пройденный ракетой s = a*t2. Координаты ракеты: x=y/tgA , y=x*tgA , где tgA = h/(v*t-d0) . Так вот, загвоздка в том, что из этих уравнений нельзя выразить ни x, ни y, а ничего другого в голову что-то не приходит. Я не могу найти зависимость между s и x :'( Если решать задачу в полярных координатах, то один параметр найти легко (угол A=arctg(tgA)), а как тогда найти другой параметр (радиус) ??? |
Сообщ.
#2
,
|
|
|
какое-то с(т)ранное условие. ракеты так не летают:)))
вообще, подумай, по какой траэктории она будет лететь, а тогда думаю, легко выяснится зависимость y от x. |
Сообщ.
#3
,
|
|
|
Насколько я понял речь идет о простейше задачи теории пресследования. ;D ;D ;D
|
Сообщ.
#4
,
|
|
|
Приведу тебе свой исходник из данной области. Может поможет. Написан для BC (CRT)
;D ;D ;D /* Гримяко Андрей (GrAnd) 21.02.2002 *** Преследование на ограниченном пространстве *** Реализация модели преследования с выбором ближайшей цели в каждый момент времени. Преследование ведется до полного истребления всех целей. Имеется граничный контроль-отражение целей от границ рабочей области (экрана). Цели располагаются случайным образом, преследователь в центре. Для введения изменяемой скорости и угла движения целей проще всего воспользоваться вспомогательными функциями типа: double Inc_Vel(double arg) { .....//функция изменения скорости} При этом необходимо учесть монотонность и непрерывность функции и обратить внимание на то, что преследователь не догонит цель, если ее скорость будет больше скорости преследователя. Разве, только при случайной встрече. Для поражения цели введена определенная зона поражения */ #include <dos.h> #include <stdlib.h> #include <iostream.h> #include <graphics.h> #include <conio.h> #include <math.h> #include <time.h> double xp,yp; //Координаты преследователя double fr[100]; //углы по отношению к горизонту double xr[100],yr[100]; //Координаты убегающих double d,vp,vr[100]; //Расстояние между преследователем и ближайшей целью //Скорости преследователя и убегающих int i,n,k=1; //Рабочая переменная и количество целей int MaxX,MaxY; bool live[100]; //Признак жизнидеятельности цели int Initialize(); void InitRun(); void Draw(); void Reflex(); main() { Initialize(); InitRun(); while (!kbhit()||(n>k))Draw(); closegraph(); } //Инициализация графики DOS //Описывается с возвратным типом для возможного дальнейшего //встраивания в программу сообщений об ошибках int Initialize() { int ec,gd,gm; cout<<"Enter amount of objects of persecution-"; cin >>n; cout<<"\nEnter velocity of persecutor-"; cin >>vp; gd=DETECT; initgraph(&gd,&gm,".."); ec=graphresult(); if (ec!=grOk) { cout<<"Graphics Initialize Error: "<<grapherrormsg(ec); exit(1); } MaxX=getmaxx(); MaxY=getmaxy(); outtext("Graphics Initialize. Press Any Key"); getch(); cleardevice(); rectangle(0,0,MaxX,MaxY); randomize(); return 0; } //Установка начального положения void InitRun() { for (i=1;i<=n;i++) { xr[i]=random(MaxX); yr[i]=random(MaxY); vr[i]=random(3)+1; fr[i]=random(628)/100; live[i]=true; } xp=MaxX/2;yp=MaxY/2; } //Определение ближайшей цели int Minimize() { int td,m=1; d=MaxX/2; for (i=1;i<=n;i++) { if (live[i]) { td=sqrt((xp-xr[i])*(xp-xr[i])+(yp-yr[i])*(yp-yr[i])); if (d>td) {d=td;m=i;} } } return m; } //Прорисовка предметов с вычислением новых координат void Draw() { setcolor(3); for (i=1;i<=n;i++) if (live[i]) circle(xr[i],yr[i],1); setcolor(5); circle(xp,yp,1); delay(50); //определение координат преследователя int f=Minimize(); if (d>2*vp){xp+=vp*(xr[f]-xp)/d;yp+=vp*(yr[f]-yp)/d;} else { setcolor(4); circle(xr[f],yr[f],5); live[f]=false; k++; } //определение координат убегающих for (i=1;i<=n;i++) { if (live[i]) { xr[i]+=vr[i]*cos(fr[i]); yr[i]+=vr[i]*sin(fr[i]); } } Reflex(); } //Обработка поведения целей на границе void Reflex() { for (i=1;i<=n;i++) { if (xr[i]>MaxX-5) fr[i]=3.14-fr[i]; if (yr[i]>MaxY-5) fr[i]=-fr[i]; if (yr[i]<5) fr[i]=-fr[i]; if (xr[i]<5) fr[i]=3.14-fr[i]; } } |
Сообщ.
#5
,
|
|
|
Не знаю помогу ли действенно, однако вижу здесь решение в виде системы уранений
одного простейшего S = vt (это самолет), и второго интегрального (ракеты). Можно и S найти, и t. Но уж очень стыдно, интегральное исчисление изучал и применял лет 300 назад :-/. Кто помнит - могут за 5 мин написать. А мне лениво. |
Сообщ.
#6
,
|
|
|
s = a*t^2 - это откуда? При равноускоренном движении r(t)=v0*t + 0.5*a*(t^2) :-/
|
Сообщ.
#7
,
|
|
|
2 andyag: Sorry, на два забыл поделить.... s = at2/2 ; v0 здесь равно нулю....
|
Сообщ.
#8
,
|
|
|
зло, а не задача! я такие решать не умею
по мне - так тут только закодить всё это надо - тут меняется всё: и угол наклона ракеты, и её скорость, и направление ускорения, и летит она по странной траектории, и к тому же всё это зависит от начального расположения ракеты и самолёта. а если ещё учесть, что земля круглая... -))))) |
Сообщ.
#9
,
|
|
|
так тебе прогу надо, или таки задачу решить так, на бумажечке:?
кстати, чет мне кажется, это не очень задача о преследовании, тк Цитата Местоположение ракеты всегда на прямой, проходящей через две точки: ракетную установку и самолёт траэкторию я так и не придумал, нечто вроде кривой второг порядка получается.... |
Сообщ.
#10
,
|
|
|
Не мудрите. Задача чисто вычислительного плана.
Новые координаты "ракеты" в кажды момент вычисляется так: xp+=vp*(xr-xp)/d; yp+=vp*(yr-yp)/d; vp-скорость ракеты xr,yr -текущие координаты "самолета" d - расстояние между ними sqrt((xp-xr)*(xp-xr)+(yp-yr)*(yp-yr)) Организуй цикл от 1 до T(необходимый момент времени) и получишь то, что тебе надо. Не забудь только изменять со временем координаты "самолета" ;D ;D ;D |
Сообщ.
#11
,
|
|
|
P.S.
Забыл сказать - не забудь учесть ускорение. |
Сообщ.
#12
,
|
|
|
Обычно положениие "ракеты" в задачах такого типа выбирается не относительно неподвижной ракетной установки на Земле, а на прямой соединяющей "ракету" с "самолетом" . Так выглядит правильней ;D ;D ;D
|
Сообщ.
#13
,
|
|
|
Цитата Demo_S, 28.05.02, 01:52:25 так тебе прогу надо, или таки задачу решить так, на бумажечке:? кстати, чет мне кажется, это не очень задача о преследовании, тк траэкторию я так и не придумал, нечто вроде кривой второг порядка получается.... При равноускоренном (равномерном) движении обоих объектов траектория будет представлять Спираль Архимеда - ro=A*fi(в полярных координатах). Правда здорово растянутую. А задача самая настоящая из теории преследования ;D ;D ;D |
Сообщ.
#14
,
|
|
|
Именно, спираль. Вычислить можно и так:
За минимальный промежуток по времени dt, ракета проходит элементарный путь dS, наклон вектора направления движения в этот момент времени равен a(t), соответственно пророст по координате dx = cos(a(t))*dS (по координате Y - также, только sin), интегрируя по времени от 0 до нужного T получаем нужные координаты. А можно вычислить вааще и какой путь преодолела ракета, хотя без интегрирования и так можно (в примере то гравитации нет) P.S. a(t) нужно выразить через двидение ракеты и самолета, это чуть сложнее. |
Сообщ.
#15
,
|
|
|
Что это мы зря все ьуь думаем. Клиент, то пропал куда-то
|
Сообщ.
#16
,
|
|
|
И правда-то... Может так наблюдает немного? :)
|
Сообщ.
#17
,
|
|
|
"Клиента" гады провы от инета отключили на неделю....
Ладно, хрен с ней, с ракетой Я уже сделал по-другому (пренебрёг искривлением траектории ракеты, т.е. радиус (для полярных координат) r = s = a*t2/2). Спасибо всем за советы! Но всё-таки.... 2 JoeUser: Что есть a(t) ? 2 GrAnd: Что есть A в ro=A*fi ? |
Сообщ.
#18
,
|
|
|
Цитата 7in, 03.06.02, 22:01:35 "Клиента" гады провы от инета отключили на неделю.... Ладно, хрен с ней, с ракетой Я уже сделал по-другому (пренебрёг искривлением траектории ракеты, т.е. радиус (для полярных координат) r = s = a*t2/2). Спасибо всем за советы! Но всё-таки.... 2 JoeUser: Что есть a(t) ? 2 GrAnd: Что есть A в ro=A*fi ? a(t) - "альфа от т", функция угла наклона касательной к траектории по времени. |