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

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

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

> Круговое движение прямой
Jaxx
сообщение 21.10.2005 14:13
Сообщение #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 - 21.10.2005 14:15


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


Гость






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

 



- Текстовая версия 21.06.2025 23:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"