На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Help! Математика с элементами физики :)
    Народ! Помогите, плиз, что-то я никак не соображу...

    Дано:
     Самолёт, летящий на высоте 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)), а как тогда найти другой параметр (радиус) ???
    Сообщение отредактировано: 7in -
      какое-то с(т)ранное условие. ракеты так не летают:)))
      вообще, подумай, по какой траэктории она будет лететь, а тогда думаю, легко выяснится зависимость y от x.
        Насколько я понял речь идет о простейше задачи теории пресследования. ;D ;D ;D
          Приведу тебе свой исходник из данной области. Может поможет. Написан для 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];
           }
          }
            Не знаю помогу ли действенно, однако вижу здесь решение в виде системы уранений
            одного простейшего S = vt (это самолет), и второго интегрального (ракеты). Можно и S найти, и t. Но уж очень стыдно, интегральное исчисление изучал и применял лет 300 назад  :-/. Кто помнит - могут за 5 мин написать. А мне лениво.
              s = a*t^2 - это откуда? При равноускоренном движении r(t)=v0*t + 0.5*a*(t^2)  :-/
                2 andyag: Sorry, на два забыл поделить.... s = at2/2 ; v0 здесь равно нулю....
                Сообщение отредактировано: 7in -
                  зло, а не задача! я такие решать не умею :)
                  по мне - так тут только закодить всё это надо - тут меняется всё: и угол наклона ракеты, и её скорость, и направление ускорения, и летит она по странной траектории, и к тому же всё это зависит от начального расположения ракеты и самолёта. а если ещё учесть, что земля круглая... -)))))
                    так тебе прогу надо, или таки задачу решить так, на бумажечке:?:)
                    кстати, чет мне кажется, это не очень задача о преследовании, тк
                    Цитата
                    Местоположение ракеты всегда на прямой, проходящей через две точки: ракетную установку и самолёт

                    траэкторию я так и не придумал, нечто вроде кривой второг порядка получается....
                      Не мудрите. Задача чисто вычислительного плана.
                      Новые координаты "ракеты" в кажды момент вычисляется так:
                      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
                       
                        P.S.
                        Забыл сказать - не забудь учесть ускорение.
                          Обычно положениие "ракеты" в задачах такого типа выбирается не относительно неподвижной ракетной установки на Земле, а на прямой соединяющей "ракету" с "самолетом" . Так выглядит правильней ;D ;D ;D
                            Цитата Demo_S, 28.05.02, 01:52:25
                            так тебе прогу надо, или таки задачу решить так, на бумажечке:?:)
                            кстати, чет мне кажется, это не очень задача о преследовании, тк
                            траэкторию я так и не придумал, нечто вроде кривой второг порядка получается....


                            При равноускоренном (равномерном) движении обоих объектов траектория будет представлять Спираль Архимеда - ro=A*fi(в полярных координатах). Правда здорово растянутую.
                            А задача самая настоящая из теории преследования ;D ;D ;D
                              Именно, спираль. Вычислить можно и так:

                              За минимальный промежуток по времени dt, ракета проходит элементарный путь dS, наклон вектора направления движения в этот момент времени равен a(t), соответственно пророст по координате dx = cos(a(t))*dS (по координате Y - также, только sin), интегрируя по времени от 0 до нужного T получаем нужные координаты.
                              А можно вычислить вааще и какой путь преодолела ракета, хотя без интегрирования и так можно (в примере то гравитации нет)

                              P.S. a(t) нужно выразить через двидение ракеты и самолета, это чуть сложнее.
                                Что это мы зря все ьуь думаем. Клиент, то пропал куда-то
                                  И правда-то... Может так наблюдает немного?  :)
                                    "Клиента" гады провы от инета отключили на неделю....

                                    Ладно, хрен с ней, с ракетой :)
                                    Я уже сделал по-другому (пренебрёг искривлением траектории ракеты, т.е. радиус (для полярных координат) r = s = a*t2/2).
                                    Спасибо всем за советы!

                                    Но всё-таки....
                                    2 JoeUser: Что есть a(t) ?
                                    2 GrAnd: Что есть A в ro=A*fi ?
                                      Цитата 7in, 03.06.02, 22:01:35
                                      "Клиента" гады провы от инета отключили на неделю....

                                      Ладно, хрен с ней, с ракетой :)
                                      Я уже сделал по-другому (пренебрёг искривлением траектории ракеты, т.е. радиус (для полярных координат) r = s = a*t2/2).
                                      Спасибо всем за советы!

                                      Но всё-таки....
                                      2 JoeUser: Что есть a(t) ?
                                      2 GrAnd: Что есть A в ro=A*fi ?


                                      a(t) - "альфа от т", функция угла наклона касательной к траектории по времени.
                                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                      0 пользователей:


                                      Рейтинг@Mail.ru
                                      [ Script execution time: 0,0547 ]   [ 15 queries used ]   [ Generated: 2.05.24, 21:10 GMT ]