Координатные оси и оцифрованная сетка — Pascal(Паскаль)

program grid;
uses Graph;

var
 x0,y0:integer; { координаты начала координатных осей }
 dx,dy:integer; { шаг координатной сетки (в пикселях) }
 h,w:integer;   { высота и ширина области вывода координатной сетки }
 x,y:integer;

 lx,ly:real;    { метки (оцифровка) линий сетки по X  Y }
 dlx,dly:real;  { шаг меток (оцифровки) линий сетки по X и Y }
 st:string;     { изображение метки линии сетки }
 cross:integer; { счетчик неоцифрованных линий сетки }
 dcross:integer;{ количество неоцифрованных линий между оцифрованными }

 grDriver: Integer;
 grMode: Integer;
 ErrCode: Integer;

begin
 grDriver := VGA;
 grMode:=VGAHi;
 InitGraph(grDriver, grMode,'d:\tp\bgi');
 ErrCode := GraphResult;
 if ErrCode <> grOk then Halt(1);

 x0:=50; y0:=450; { оси начинаются в точке (40,450) }
 dx:=40; dy:=40;  { шаг координатной сетки 40 пикселей }
 dcross:=3;       { помечать линии сетки X через две }
 dlx:=0.5;        { шаг меток оси 0.5, так как dcross = 3,
                    то будут выведены метки 1.5, 3, 4.5 и т.д. }
 dly:=1;          { шаг меток оси Y, метками будут: 1, 2, 3 и т.д. }

 h:=300;
 w:=400;

 lx:=0;           { начало координат помечается метками 0 }
 ly:=0;

 cross:=dcross+1;
 Line(x0,y0,x0,y0-h);  { ось X }
 Line(x0,y0,x0+w,y0);  { ось Y }

 { засечки, сетка и оцифровка по оси X }
 x:=x0;
 repeat
   line(x,y0-3,x,y0+3);  { засечка }
   cross:=cross-1;
   if cross = 0          { оцифровка }
   then
     begin
       Str(lx:0:1,st);
       OutTextXY(x-8,y0+5,st);
       cross:=dcross;
     end;

   lx:=lx+dlx;
   SetLineStyle(DottedLn, 0, NormWidth);
   Line(x,y0-3,x,y0-h);                   { линия сетки }
   SetLineStyle(SolidLn, 0, NormWidth);
   x:=x+dx;
 until (x>x0+w);

 { засечки, сетка и оцифровка по оси Y }
 y:=y0;
 repeat
   line(x0-3,y,x0+3,y);    { засечка }
   Str(ly:0:1,st);
   OutTextXY(x0-40,y,st);  { оцифровка }
   ly:=ly+dly;
   SetLineStyle(DottedLn, 0, NormWidth);
   Line(x0+3,y,x0+w,y);    { линия сетки }
   SetLineStyle(SolidLn, 0, NormWidth);
   y:=y-dy;
 until (y<y0-h);

 Readln;
 CloseGraph;

end.

Leave a Comment

88 − = 87