Значит так. Нужно сделать какое-то подобие "радара". Есть окружность, в которой вписана прямая линия. Линия начинается в центре круга. Она должна перемещаться наподобие стрелки часов против часовой стрелки, только не слишком быстро. Окружность со стрелкой я сделал, а вот с движением линии проблемы.
Код
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.
Shura
21.10.2005 18:59
Если, скажем, точка движется по окружности радиуса "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.
volvo
21.10.2005 19:02
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;
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;