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

 





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