Работа в графическом режиме. Программа построения графика функций

Страницы работы

Содержание работы

                                                           РАБОТА В ГРАФИЧЕСКОМ   РЕЖИМЕ

1.  Переключение системы на графический режим  производится с помощью функции:

Initgraph(var graphdrive: integer, var graphmode: integer, pathtodriver: string)

-осуществляет поиск в каталоге, имя которого указано в аргументе pathtodriver , файла содержащего программу графического драйвера с номером , указанном в аргументе  graphdriver; перемещение программы в оперативную память и установка графического режима, номер которого присвоен переменной, указанной в аргументе graphmode.

Адаптеры:

EGA - адаптер  EGA

VGA - адаптерVGA

DETECT – автоматическое распознавание адаптера

Режим:

EGALO – 640х200 16 цветов 4 страницы

EGAHI – 640х350 16 цветов 2 страницы

VGALO – 640х200 16 цветов 4 страницы

VGAMED – 640х350 16 цветов 2 страницы

VGAHI – 640х480 16 цветов 1 страница

(*  включение графического режима *)

GraphResult ; - выдача кода ошибки выполнения графической операции. GraphResult сбрасывается в 0 (нет ошибки ) после обращения к данной процедуре, поэтому следует сохранить значение кода ощибки во временной переменной , а затем проверить ее.Определены следующие константы:

Константа ошибки

Графики

Код

Ошибки

Соответствующее сообщение об ошибке

GrOk

GrNoInitGraph

GrNotDetected

GrFileNotFound

GrInvalidDriver

GrNoLoadMem

GrNoScanMem

GrNoFloodMem

GrFontNotFound

GrNoFontMem

GrInvalidMode

GrError

GrIOError

GrInvalidFont

grInvalidFontNum

0

-1

-2

-3

-4

-5

-6

-7

-8

-9

-10

-11

-12

-13

-14

Нет ошибки

Графика не инициализирована

Графические средства не найдены

Файл не найден

Недопустимый драйвер

Память не загружена

Ошибка при просмотре памяти

Ошибка пр закраске

Шрифт не найден

Шрифт не загружен в память

Недопустимый режим

Ошибка графики

Ошибка ввода-вывода

Недопустимый файл шрифта

Недопустимый номер шрифта

Если код ошибки равен grOk  удачное выполнение графической операции

exit(1) – выход из программы по ошибке

uses graph;

var

grDriver: Integer;

grMode: Integer;

ErrCode: integer;

Begin

GrDriver:=Detect;

InitGraph(grDriver, grMode,’..\ bgi’);

ErrCode:=GraphResult;

If ErrCode=grOk then

Begin {do graphics}

Line(0, 0, GetMaxX, GetMaxY);

Readln;

CloseGraph;

End

Else

Writeln(‘Graphics error:’,GraphErrorMsg(ErrCode));

End.

2.  Очистка графического экрана:ClearDevice;

3. Восстановление текстового режима: CloseGraph   ;

4. Проверяет наличие соответствующих аппаратных средств и определяет , лалой графический режим и драйвер следует использовать , и присваивает переменной  GraphDriver значение, равное номеру драйвера, а переменной GraphMode –значение равное номеру предполагаемого графического режима:

 DetectGraph(GraphDriver, GraphMode);

   /*Пример*/

uses Graph;

var

graphDriver: integer;

GraphMode: integer;

ErrCode:integer;

Begin

GraphDriver:=Detect;

DetectGraph(GraphDriver, GraphMode);

InitGraph(GraphDriver, GraphMode, ‘..\ bgi’);

If GraphResult()=grOk then exit(1);

ClearDevice;

Line(0, 0, GetMaxX, 0);

Readln;

CloseGraph;

End.

4.  Определение текущего цвета фона графического окна: GetBkColor;

5.  Возвращает максимальный номер цвета : GetMaxColor;

6.  Сообщение о максимальном значении горизонтальной координаты экрана : GetMaxX;

7.  Сообщение о максимальном значениии вертикальной координаты экрана :GetMaxY;

8.  Перемещение графического курсора ( изменмние горизонтальной координаты графического курсора на величину Dx , и вертикальной координаты на величину  Dy ):              MoveRel(Dx, Dy: integer);

9.  Перемещение графического курсора в точку с координатами (X,Y):MoveTo(X, Y: integer);

10.  Изменение цвета фона графического окна : SetBkColor(ColorNum: word);

11.  Выбор для вычерчивания линии с номером Color:SetColor(Color: word);

12.  Задание графического окна с координатами (х1, у1) , (х2, у2).Аргумент Clip показывает , следует ли усекать фрагменты , выходящие за пределы окна:                                SetViewPort(x1, y1, x2, y2: integer; Clip: boolean);

13.  Вычерчивание окружности с центром в точке (х, у), радиусом, заданным в аргументе Radius:Circle(x, y: integer ; Radius: word);

14.  Вычерчивание эллиптической кривой с центром (х, у) и полуосямиXRadius и Yradius, начиная с угла StAngle и заканчивая углом EndAngle  задаются в градусах. Вычерчивание против часовой стрелки. Если углы равны 0 и 360 гркдусов – вычерчивается полный эллипс:                       Ellipse(x, y: integer; StAngle, EndAngle: word; XRadius, YRadius);

15.  Вычерчивание линии с началом в точке (х1, у1), концом в точке (х2, у2):                     Line(x1, y1, x2, y2: integer);

16.  Вычерчивание точки с координатами (х, у) и цветом (Color):                                        PutPixel(x, y: integer; Color: word);

17.  Вычерчивание прямоугольника, заданного координатами противоположных верщин: Rectangle(x1, y1, x2, y2: integer);

18.  Вычерчивание закрашенного эллипса в точке (х, у) и полуосямиXRadius и YRadius : FillEllipse(x, y: integer; Xradius, Yradius: word). 

ПРОГРАММА ПОСТРОЕНИЯ ГРАФИКА ФУНКЦИЙ

program graph1;

uses crt,graph;

const a=1;

var

   gd,gm,Xend,Yend:integer;

   mx,my,x,y,n:integer; k,l,t:real;

   m:string;

function f(x:real):real;

begin

Уравнение своей функции;

end;

Begin

gd:=detect;

initgraph(gd,gm,'d:\bp\bgi');

{----------------------ОСИ--------------------}

Xend:=getmaxx;

Yend:=getmaxy;

mx:=20;

my:=20;

setcolor(3);

line(0,Yend div 2,Xend,Yend div 2);

line(Xend div 2,0,Xend div 2,Yend);

line(Xend,Yend div 2,Xend-5,(Yend div 2)-5);

line(Xend,Yend div 2,Xend-5,(Yend div 2)+5);

line(Xend div 2,0,(Xend div 2)-5,0+5);

line(Xend div 2,0,(Xend div 2)+5,0+5);

x:=-1; y:=getmaxy div 2;

repeat

line(x,y-3,x,y+3);

x:=x+mx;

until x>=getmaxx;

x:=getmaxx div 2; y:=-1;

repeat

line(x-3,y,x+3,y);

y:=y+my;

until y>=getmaxy;

{------------------X,Y------------------------}

setcolor(ReD);

settextstyle(5,0,1);

outtextxy(Xend-15,(Yend div 2)+10,'X');

settextstyle(5,0,1);

outtextxy((Xend div 2)-20,-10,'y');

x:=-1; n:=-16; y:=getmaxy div 2;

repeat

n:=n+1;

str(n,m);

x:=x+mx;

settextstyle(2,0,3);

outtextxy(x,y+3,m);

until n=15;

x:=getmaxx div 2; n:=12; y:=-1;

repeat

n:=n-1;

if n=0 then begin n:=n-1; y:=y+my   end;

str(n,m);

y:=y+my;

settextstyle(2,0,3);

outtextxy(x+5,y,m);

until n=-11;

{-----------------ГРАФИК----------------------}

t:=-10;{начальное значение}

repeat

k:=mx*t;

l:=my*f(t);

putpixel((Xend div 2)+round(k),(Yend div 2)+round(l),10);

t:=t+0.1;

until t>=5000;{конечное значение}

{---------------------------------------------}

readln;

closegraph;

End.

Похожие материалы

Информация о работе