Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_МЕТ№2.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
247.81 Кб
Скачать

4. Построение графических изображений

Модуль Graph используется, в основном, для построения графиков и вычерчивания простейших изображений: линий, окружностей, эллипсов, прямоугольников и т.д. Линии могут быть сплошные, штриховые и т.д. Замкнутые области можно закрашивать сплошной заливкой, штриховкой и пр. Для рисования графических изображений используется большинство процедур модуля Graph.

SetLineStyle(тип:Word;образец:Word;толщина:Word);

Типы линий :

0 - непрерывная;

1 - из точек;

2 - из точек и тире (штрихпунктирная);

3 - пунктирная;

4 - определяется пользователем.

Образец равен 0 - если линия стандартная и отличен от 0, если пользователь задает свой образец.

Толщина:

1 - нормальная,

3 - жирная (тройная).

2) Построение линий выполняется процедурами:

Line (X1,Y1,X2,Y2); Строит линию между точками с координатами (X1,Y1) и (X2,Y2);

Lineto(X,Y); Строит линию из текущего положения курсора до точки с координатами (X,Y).

3) Circle(X,Y:integer;R:Word); Строит окружность радиусом R с центром в точке (X,Y).

4) Rectangle(X1,Y1,X2,Y2); Строит прямоугольник с координатами:

(X1,Y1) - верхний левый,

(X2,Y2) - нижний правый угол.

Другие сведения о примитивах приводятся в справочниках по Турбо Паскалю.

Все фигуры рисуются текущим типом и цветом линии. Цвет линии задается из имеющегося активного набора цветов – палитры. У драйверов EGA и VGA в палитре 15 цветов. Палитра устанавливается при инициировании графического режима. Ее можно изменять с помощью процедуры SetAllPalette. В палитре можно заменить один цвет на другой с помощью процедуры SetPalette.

Рассмотрим фрагмент программы, которая строит график функции Y=f(x) для X, изменяющегося от Xn до Xk с шагом dX. Масштабы:

Mx = (GetMaxX-20) Div (Xk-Xn);

My = (GetMaxY-10) Div (Ymax-Ymin);

Будем считать, что масштабы определены к моменту построения графика. Для его построения воспользуемся процедурой LineTo, которая будет проводить линию от точки к точке. Сам график поместим в прямоугольник с координатами (5,5) в верхнем левом углу и (300,190) – в нижнем правом. Считаем, что F(x)- функция, описанная в данной программе.

Программа построения графика может быть представлена в виде:

Program probaGraph;

Uses

crt,graph;

Var

Gd,Gmode,Er:Integer;

x,xh,xk,y,dx,mx,my:Integer;

Begin

xh:=0;

dx:=1;

xk:=10;

mx:20;

my:=8;

{Инициирование графического режима}

Gd:=detect;

{ Графический драйвер находится в текущем каталоге }

InitGraph(Gd,Gm,``);

Er:=Graphresult;

If Er=Grok then

Begin

{Графический режим}

Cleardevice;

{Прямоугольник}

Setcolor(2); { цвет линий }

SetLineStyle(0,0,1);

Rectangle (5,5,300,190);

{ цвет надписи }

Setcolor(3);

Settextstyle(0,0,1);

OuttextXY(280,20,`Y=F(X)`);

{ Построение графика }

SetColor(1);

SetLinestyle(3,0,3);

x:=Xn;

y:=F(x);

{ Начальная точка графика }

MoveTo(x*Mx+5,GetMaxY-y*My-10);

While x<= Xk do

Begin

x:=x+dX;

y:=F(x);

{ Линия к следующей точке графика }

LineTo(x*Mx+5,GetMaxY-y*My-10);

End;

Repeat

Until KeyPressed; { Останов вывода изображения }

CloseGraph;

End

Else

Writeln('Ошибка графики, код ошибки - ',Er);

End.

Заливка рисунка (замкнутой области) выполняется процедурами:

5) SetFillStyle (Pattern,Color:Word); которая определяет тип заливки.

Здесь Pattern - тип заливки,

Pattern = 0 - нет штриховки

1 - сплошная

2 - ‘- - - ‘

3 - `///'

4 `///`- толстые

. . . . . . .

11 - частые точки

12 - пользовательская

Color - цвет заливки ( из палитры ).

Пример.

SetFillStyle(4,1);

6) FloodFill(x,y,Border:Word); которая выполняет заливку ( штриховку) до границы цвета Border от точки рисунка с координатами (X,Y).

Например, программа, которая рисует концентрические окружности из точки с координатами (150, 100) всеми 15-ю цветами и закрашивает получившиеся кольца всеми типами заливки и цветом, отличным от цвета контура будет иметь вид.

Program All_Colors;

uses

Crt, Graph;

var

Er,GraphDriver, GraphMode: Integer;

X, Y: Integer;

Radius,Color:Integer;

begin

graphdriver:=Vga;

Graphmode:=VgaHi;

InitGraph(Graphdriver,GraphMode,'');

Er:=GraphResult;

If Er=Grok then

begin

ClearDevice;

For Color:=0 to MaxColors do

Begin

SetColor(Color);

for Radius := 1 to 11 do

Begin

Circle(150, 100, Radius * 10);

SetFillStyle(Radius,MaxColors -Color);

Floodfill(150-Radius*10+5,100, Color);

End;

readln;

End;

CloseGraph;

end

Else

Writeln('Ошибка графики ',Er);

Readln;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]