IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача про движение в пространстве
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Есть такое задание:

’’Составить укрупненный алгоритм и программу на языке высокого уровня для решения задачи по своему варианту. Язык программирования TPascal.
В текстовом файле имеются данные для N воздушных целей, определенных станцией слежения в момент времени T0
alpha(i)-направление движения, V гор(i) - гор. скорость, V вер(i) - верт. скорость, phy(i) - азимут, H(i) - высота,L(i) - расстояние до цели (гориз.)
(число целей заранее не известно)
Параметры движения постоянны. Составить программу для расчета траектории движения целей и определения величин, указанных в таблице для своего варианта.
Программа должна визуализировать начальное положение целей и траекторию их движения, а также основные показатели целей, включая расчетные значения по своему варианту’’

Составил я прогу, которая задает цели и их параметры. Другая прога рисует еллипс (типа радар) рисует цели (пользовался полярными координатами)... но стопор состоит в том, что не могу их заставить двигаться =0)

Вот то, что я намонстрячил:
1. Задаю количество целей и их параметры
Код

program zadanie_znacheniy;

 var
   kc, counter: integer;
   alpha, vgor, vver, phy, h, l: word;
   kcfile: text;
   znfile: text;

 begin
   randomize;
   writeln('Vvedite kolichestvo celey'); readln(kc);
   counter:=1;

   assign(kcfile, 'kc.dat');
   assign(znfile, 'zn.dat');

   rewrite(kcfile);
     writeln(kcfile, kc);
   close(kcfile);

   while counter<=kc do
     begin
       alpha:=random(361);
       vgor:=random(101);
       vver:=random(101);
       phy:=random(361);
       h:=random(501);
       l:=random(201);

       if counter=1 then
         begin
           rewrite(znfile);
           close(znfile);
         end;
       append(znfile);
         writeln(znfile,alpha,' ',vgor,' ',vver,' ',phy,' ',h,' ',l);
       close(znfile);

       counter:=counter+1;
     end;

 end.


2. А эта прога должна данные обработать... после строчки {PALEVO случился заворот мозгов :ypr:

Код

program obrabotka;

 uses CRT, Graph;

 var
   alpha, vgor, vver, phy, h, l: array [1..200] of word;
   napr, xg, yg, x, y, y1, y2, dx0, dy0, dx, dy: array [1..200] of integer;
   gd, gm, kc, co, c, t, tt, h0, rx, ry: integer;
   kcfile, znfile: text;
   vv, vg: array [1..200] of real;
   yr, xr: string;

const
   mn=0.4;
   nm=0.1;
 procedure znacheniya;
  begin
   co:=1;
   assign(kcfile, 'kc.dat');
   assign(znfile, 'zn.dat');
   reset(kcfile);
     read(kcfile,kc);
   close(kcfile);
   reset(znfile);

     while co<=kc do
       begin
         read(znfile,alpha[co],vgor[co],vver[co],phy[co],h[co],l[co]);
         vg[co]:=vgor[co]*nm;
         vv[co]:=vver[co]*nm;
         if alpha[co]>0   then if alpha[co]<90  then napr[co]:=1;
         if alpha[co]>90  then if alpha[co]<180 then napr[co]:=2;
         if alpha[co]>180 then if alpha[co]<270 then napr[co]:=3;
         if alpha[co]>270 then if alpha[co]<360 then napr[co]:=4;
         if alpha[co]=90  then napr[co]:=10;
         if alpha[co]=180 then napr[co]:=20;
         if alpha[co]=270 then napr[co]:=30;
         if alpha[co]=360 then napr[co]:=40;
         if alpha[co]=0   then napr[co]:=40;
         co:=co+1;
       end;

   close(znfile);
  end;

 begin
  znacheniya;
  h0:=h[1];
  gd:=detect;
  gm:=2;
  InitGraph(gd, gm, '.');
    setbkcolor(black);
    setcolor(7);
     ry:=getmaxy; rx:=getmaxx;
     ellipse(rx div 2, ry-(ry div 4), 0, 360 ,230 ,230 div 6);
    setcolor(6);
     line(rx div 2, ry-(ry div 3), rx div 2, ry-(ry div 6));
     line(0, ry-(ry div 4), rx, ry-(ry div 4));
     co:=1;
     while co<=kc do
       begin
         c:=9;

        if h[co]>=h[1] then
           begin

             if h[co]<h[1]+300 then
               begin
                 c:=9;
                 c:=c+5;
                 dx[co]:=round(l[co]*sin(phy[co]));
                 dy[co]:=round(l[co]*cos(phy[co]));
                 x[co]:=dx[co];
                 y[co]:=round(dy[co]/6);
                 xg[co]:=(rx div 2)+x[co];
                 y1[co]:=ry-(ry div 4)+y[co];
                 yg[co]:=y1[co]-round(mn*h[co]);
                 setcolor(2);
                 line(xg[co], y1[co], xg[co], yg[co]);

              end;

         end;

             dx0[co]:=round(l[co]*sin(phy[co]));
             dy0[co]:=round(l[co]*cos(phy[co]));
             x[co]:=dx0[co];
             y[co]:=round(dy0[co]/6);
             xg[co]:=(rx div 2)+x[co];
             y1[co]:=ry-(ry div 4)+y[co];
             yg[co]:=y1[co]-round(mn*h[co]);
         if co=1 then
           begin
             c:=11;
             dx0[co]:=round(l[co]*sin(phy[co]));
             dy0[co]:=round(l[co]*cos(phy[co]));
             x[co]:=dx0[co];
             y[co]:=round(dy0[co]/6);
             yg[co]:=y1[co]-round(mn*h[co]);
           end;

         putpixel(xg[co], yg[co], c);
         co:=co+1;
       end;

{PALEVO...
      while t<>120 do

        begin

          while co<=kc do
            begin
             if napr[co]=1 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=2 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=3 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=4 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=10 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])-vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])-vv[co]*t);
               end;
             if napr[co]=20 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=30 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
             if napr[co]=40 then
               begin
                dx[co]:=round(l[co]*sin(alpha[co])+vg[co]*t);
                dy[co]:=round(l[co]*cos(alpha[co])+vv[co]*t);
               end;
               xg[co]:=(rx div 2)+dx[co];
               y2[co]:=ry-(ry div 4)+round(dy[co]/6);
               yg[co]:=y2[co]-round(mn*h[co]);
              line(xg[co], y2[co], xg[co], yg[co]);
              putpixel(xg[co], yg[co], c);

              co:=co+1
            end;
            co:=1;

          t:=t+1
        end;
}
    repeat until keypressed;
  CloseGraph;
 end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 5
Пол: Мужской

Репутация: -  0  +


Но вопрос все еще не закрыт...
Попробую конкретнее:
Вот здеся
Код

                dx[co]:=round(l[co]*sin(phy[co]));
                dy[co]:=round(l[co]*cos(phy[co]));

вычисляются x и y в полярной системе координат...
Далее мне нужноначать двигать точку... равномерно прямолинейно
по закону x=x0+v*t учитывая при этом направление (alpha(i))...
Т.е., как я понимаю, я должен перенести начало отсчета в точку, которая у меня получилась, и от нее плясать дальше...
А вот как ето сделать?....

(а здеся как-нить картинки можно вставлять? я бы изобразил =0))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.11.2025 1:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name