Значит так. Нужно сделать какое-то подобие "радара". Есть окружность, в которой вписана прямая линия. Линия начинается в центре круга. Она должна перемещаться наподобие стрелки часов против часовой стрелки, только не слишком быстро. Окружность со стрелкой я сделал, а вот с движением линии проблемы.
Если, скажем, точка движется по окружности радиуса "r" и центром с координатами "x0" и "y0", то координаты этой точки:
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.
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.