Смекни!
smekni.com

Графические средства языка Паскаль (стр. 2 из 2)

Чтобы продемонстрировать некоторые из графических возможностей языка Паскаль, напишем программу, рисующую график функции cos2x на отрезке [0,6p].

USES Graph;

CONST ScreenColor = DarkGray; {цвет экрана}

LineColor = Yellow; {цвет кривой}

TextColor = White; {цвет подписей}

AxisColor = LightCyan; {цвет координатных осей}

CONST n = 200; {количество отрезков в графике}

LeftBlank = 100; {отступ слева}

RightBlank = 100; {отступ справа}

TopBlank = 100; {отступ сверху}

BottomBlank = 60 ; {отступ снизу}

TicSize = 5; {размер делений на осях}

PowerSize = 3; {размер цифры 2 (показатель степени)}

TicsNumY = 10; {количество делений на оси Y}

TicsNumX = 6; {количество делений на оси Y}

CONST x1=6*Pi;

FUNCTION f(x:REAL):Real; BEGIN f:=Sqr(Cos(x)); END;

VAR GrDriver,GrMode,Lx,Ly,Px,Py : Integer;

i : Word;

s : STRING;

Mx,My,x : Real;

BEGIN {инициализируем графический режим}

GrDriver:=DETECT; InitGraph(GrDriver,GrMode,'');

{закрасим экран фоновым цветом}

SetFillStyle(1,ScreenColor); Bar(0,0,GetMaxX,GetMaxY);

{вычислим длины осей и положение начала координат}

Lx:=GetMaxX+1-LeftBlank-RightBlank;

Ly:=GetMaxY+1-TopBlank-BottomBlank;

Px:=LeftBlank; Py:=GetMaxY-BottomBlank;

{нарисуем оси}

SetColor(AxisColor);

MoveTo(LeftBlank,TopBlank-1); LineRel(0,Ly); LineRel(Lx,0);

{оцифруем ось X}

SetTextJustify(CenterText,TopText);

FOR i:=1 TO TicsNumX DO BEGIN

MoveTo(LeftBlank+i*Lx DIV TicsNumX,Py); LineRel(0,TicSize);

IF i=1 THEN s:='' ELSE Str(i,s); MoveRel(0,2); OutText(s+'Pi');

END;

{оцифруем ось Y}

SetTextJustify(RightText,CenterText);

FOR i:=1 TO TicsNumY DO BEGIN

MoveTo(Px,Py-i*Ly DIV TicsNumY); LineRel(-TicSize,0);

Str(i/10:3:1,s); MoveRel(-2,0); OutText(s);

END;

{выведем пояснительный текст}

SetTextJustify(CenterText,CenterText); SetColor(TextColor);

MoveTo(LeftBlank+Lx DIV 2,TopBlank DIV 2);

OutText('график функции Cos(x)');

{выведем показатель степени}

MoveRel(TextWidth('график функции Cos(x)') DIV 2-TextWidth('(x)'),TextHeight('s'));

SetTextStyle(SmallFont,0,PowerSize); OutText('2');

{вычислим масштабы по X и Y}

Mx:=Lx/x1; My:=Ly;

{нарисуем график}

SetLineStyle(0,0,3); SetColor(LineColor); MoveTo(Px,Py-Ly);

FOR i:=1 TO n DO BEGIN

x:=i*x1/n; LineTo(Px+Round(Mx*x),Py-Round(My*f(x)));

END;

{сделаем задержку}

READLN;

{перейдем в текстовый режим}

CloseGraph;

END.

Это неплохая программа, но автор хотел бы предостеречь от ее бездумного использования как эталона во всех случаях. Она использует априорную информацию о виде изображаемой функции: минимальное значение функции = 0, максимальное значение функции = 1, начало координат находится в точке пересечения осей и т.п. В ваших программах все может быть не так.