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

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

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

 
 Ответить  Открыть новую тему 
> Круговое движение прямой
сообщение
Сообщение #1


Пионер
**

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

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


Значит так. Нужно сделать какое-то подобие "радара". Есть окружность, в которой вписана прямая линия. Линия начинается в центре круга. Она должна перемещаться наподобие стрелки часов против часовой стрелки, только не слишком быстро. Окружность со стрелкой я сделал, а вот с движением линии проблемы.
Код

uses crt,graph;
var
 graphmode,graphdriver,errorcode:integer;
 x,y,i:integer;
begin
 graphdriver:=detect;
 initgraph(graphdriver,graphmode,'egavga.bgi');
 errorcode:=graphresult;
 if errorcode<>grok then
 begin
 clrscr;
   writeln('Graphics error: ',grapherrormsg(errorcode));
   writeln('Program aborted...');
   halt(1); end;
   setcolor(green);
   circle(320,240,220);
   setcolor(lightgreen);
   circle(320,240,218);
   circle(320,240,2);
   setcolor(lightgreen);
   setlinestyle(dottedln,0,normwidth);
   line(320,238,320,22);
   readln;
end.


Сообщение отредактировано: Jaxx -


--------------------
- Дорогие девушки! У вас сухая кожа? Редкие волосы? Проблемы с фигурой? Приходите к нам! У нас темно и мы пьяные.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 136
Пол: Мужской
Реальное имя: Александр

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


Если, скажем, точка движется по окружности радиуса "r" и центром с координатами "x0" и "y0", то координаты этой точки:
Код

x = x0 + r*cos(t);
y = y0 + r*sin(t)

Где "t" - угол поворота точки в радинанах по часовой стрелке (считая от самой правой точки окружности).

Вот код:

Uses
 Crt, Graph;
Const
 r = 215;
Var
 gd, gm: Integer;
 t: Real;
Begin
 InitGraph(gd,gm,'');
  t:=0;
 repeat
   SetColor(15);
  Circle(320,240,220);
   SetColor(2);
  Line(320, 240, Round(320+r*cos(t)), Round(240+r*sin(t)));
   Delay(5000);
   SetColor(0);
  Line(320, 240, Round(320+r*cos(t)), Round(240+r*sin(t)));
   t:=t-0.01
 until KeyPressed;
 CloseGraph
End.



--------------------
Старайтесь восполнять пробелы в области незнания! ;-D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Jaxx, вот, выдрал кусок из своей старой игрушки (правда там вращение ПО часовой стрелке, но изменяется элементарно):
uses graph, crt;

procedure InitGraphix;
var gdriver, gmode, errorcode: integer;
begin
  gdriver := DETECT;
  initgraph( gdriver, gmode, '' );
  errorcode := graphresult;
  if errorcode <> grOk then begin
    writeln('Graphics error: ' + grapherrormsg(errorcode));
    readln; halt(100);
  end;
end;

procedure CloseGraphix;
begin
  closegraph;
end;

const
  RadToDegrees = 180 / Pi;
const
  numRadars: integer = 0;

type
  radar_circle = record
    CenterX, CenterY,
    RadarRadius,
    CurrentAngle,
    CurrentRadius: integer;
  end;

const
  MaxRadars = 10;
var
  RadarInfo: array[ 0 .. pred(MaxRadars) ] of radar_circle;

function GetXCoords(rHandler: integer): integer;
begin
  with RadarInfo[rHandler] do
    GetXCoords := CenterX + Trunc(RadarRadius *
                  sin(CurrentAngle / RadToDegrees));
end;
function GetYCoords(rHandler: integer): integer;
begin
  with RadarInfo[rHandler] do
    GetYCoords := CenterY - Trunc(RadarRadius *
                  cos(CurrentAngle / RadToDegrees));
end;

function DrawCircleRadar(CentX, CentY, Radius: integer): integer;
begin
  if NumRadars = MaxRadars then DrawCircleRadar := -1;

  setcolor(white);
  circle(CentX, CentY, Radius);
  setfillstyle(solidfill, green);
  floodfill(CentX, CentY, white);
  with RadarInfo[NumRadars] do begin
    CenterX := CentX;
    CenterY := CentY;
    RadarRadius := Radius;
    CurrentAngle := 0;
    CurrentRadius := 1;

    setwritemode(XORput);
    line(CenterX, CenterY,
         GetXCoords(NumRadars), GetYCoords(NumRadars));
    setwritemode(COPYput);
  end;
  DrawCircleRadar := NumRadars;
  inc(NumRadars);
end;

procedure RevolveRadar(rHandler, revStep: integer);
begin
  delay(2500);
  with RadarInfo[RHandler] do begin
    setwritemode(XORput);
    line( CenterX, CenterY,
          GetXCoords(rHandler), GetYCoords(rHandler));
    inc(CurrentAngle, revStep);
    if CurrentAngle > 359 then
      dec(CurrentAngle, 360);
    line(CenterX, CenterY,
         GetXCoords(rHandler), GetYCoords(rHandler));
    setwritemode(COPYput);
  end;
end;

var
  FirstRadar: Integer;
begin
  InitGraphix;
  FirstRadar := DrawCircleRadar(100, 400, 75);

  While not KeyPressed do
    RevolveRadar(FirstRadar, 3);

  While KeyPressed Do ReadKey;
  CloseGraphix;
end.
 К началу страницы 
+ Ответить 

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

 



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