Главная страница
Навигация по странице:

  • Задание.

  • Отчетность.

  • Лабораторная работа. Модуль Graph


    Скачать 106 Kb.
    НазваниеМодуль Graph
    Дата05.09.2018
    Размер106 Kb.
    Формат файлаdoc
    Имя файлаЛабораторная работа.doc
    ТипЛабораторная работа
    #49801

    Лабораторная работа «Модуль Graph»

    В среде TurboPascal обычно работа с графикой осуществляется с помощью стандартного модуля Graph.

    Присоединение модуля к программе осуществляется стандартным образом: Uses Graph;

    Начало (инициализация) работы графического пакета осуществляется процедурой InitGrapyh, которая содержит следующие параметры

    GraphDriver – переменная, в которую необходимо записать код требуемого графического

    драйвера или нуль, если требуется автоматическое определение драйвера.

    Она может принимать следующие значения

    Имя

    Значение

    Назначение

    Detect

    0

    Автоматический выбор драйвера

    CGA

    1




    MCGA

    2




    EGA

    3




    EGAMono

    4




    IBM8514

    5




    HercMoho

    6




    ATT400

    7




    VGA

    8




    PC3270

    9




    CurrentDriver

    -128

    Текущий драйвер

    GraphMode – переменная, в которую помещается код графического режима.(значение

    можно не указывать)

    DriverPath – строка, содержащая путь к драйверу (если строка пустая, считается, что драйвер находится в ткущем каталоге)

    Еще раз:

    Procedure InitGraph(var GraphDriver: integer; var GrapMode: integer; DriverPath: string);

    Результат выполнения процедуры InitGraph помещается в переменную GraphResult. Она может принимать следующие значения:

    Имя

    Значение

    Назначение

    GrOk

    0

    инициализация прошла нормально: можно работать.

    GrNoInitGraph

    -1

    Не установлен графический режим

    grNotDetected

    -2

    нет графического адаптера

    grFileNotFound

    -3

    нет драйвера устройства:

    grInvalidDriver

    -4

    ошибка в драйвере

    grNotLoadMem

    -5

    нет памяти для загрузки драйвера

    grNoScanMem

    -6

    Нет памяти для сканирования

    grNoFloodMem

    -7

    нет памяти для закраски

    grFontNotFound

    -8

    Не найден файл со шрифтом

    GrNoFontMem

    -9

    нет памяти для загрузки

    GrInvalidMode

    -10

    недопустимый режим для выбранного драйвера

    GrError

    -11

    Ошибка графической системы

    grIOerror

    -12

    Ошибка ввода-вывода графической системы

    GrInvalidFont

    -13

    Ошибка в файле со шрифтом

    grInvalidFontNum

    -14

    Неверный номер шрифта

    Завершение работы графического режима осуществляется процедурой CloseGraph, которая параметров не имеет.

    Для задания цвета изображения используется процедура SetColor, а для задания цвета фона – SetBkColor. Обе процедуры имеют по одному параметру – коду цвета, с возможными значениями:


    Имя

    Значение

    Назначение

    Black

    0

    Чрный

    Blue

    1

    Синий

    Green

    2

    Зеленый

    Cyan

    3

    Голубой

    Red

    4

    Красный

    Magenta

    5

    Фиолетовый

    Brown

    6

    Коричневый

    LightGray

    7

    Светло-серый

    DarkGray

    8

    Темно-серый

    LightBlue

    9

    Светло-синий

    LightGreen

    10

    Светло-зеленый

    LightCyan

    11

    Светло-голубой

    LightRed

    12

    Розовый

    LightMagenta

    13

    Светло-фиолетовый

    Yellow

    14

    Желтый

    White

    15

    Белый


    Для закраски точки используется процедура PutPixel(X,Y:Integer;Pixel:Word), где Х и Y координаты точки, а Pixel – цвет, в который закрашивается точка.

    Для построения отрезка используются процедуры Line, LineRel и LineTo.

    Процедура Line имеет параметрами координаты концов отрезка X0, Y0, X1, Y1.

    Процедура LineRel проводит отрезок от текущей позиции в точку, сдвинутую относительно текущей позиции на величины Dx и Dy, которые являются параметрами процедуры

    Процедура LineTo проводит отрезок от текущей позиции в точку с координатами Х, Y, которые являются параметрами процедуры.

    Для перемещения указателя без высвечивания точки используются процедуры MoveRel и MoveTo.

    Первая перемещает указатель координат на заданное расстояние (Dx, Dy).

    Вторая - в заданную точку (Х, Y)

    Текущие параметры линии () задаются с помощью процедуры SetLineStyle( LineStyle: Word; Pattern: Word; Thickness: Word);

    LineStyle задает стиль линии










    SolidLn

    0

    Сплошная

    DottedLn

    1

    Пунктирная

    CenterLn

    2

    Штрихпунктирная

    DashedLn

    3

    Штриховая

    UserBitLn

    4

    Заданная пользователем

    В последнем случае (и только) задается параметр Pattern.

    Thickness задает толщину линии 1 – нормальная, 3 – толстая.

    Для построения фигур из линий используются процедуры

    Bar (X1,Y1,X2,Y2: integer) построение закрашенного прямоугольника

    Bar3D (X1,Y1,X2,Y2: integer; Dept:Word; Top:boolean) построение закрашенного параллелепипеда

    DrawPoly (NumPoints: Word; Var PolyPoints); построение многоугольника

    FillPoly(NumPoints: Word; Var PolyPoints) построение закрашенного многоугольника

    FloodFill(X,Y: integer; Border:Word)

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

    X1,Y1,X2,Y2 – координаты левого верхнего и правого нижнего углов прямоугольника (передней грани параллелепипеда)

    Dept – ширина боковой грани по горизонтали.

    Top – признак вычерчивания верхней грани.

    NumPoints:- количество точек многоугольника

    PolyPoints – массив содержащий пары координат вершин многоугольника. Их число NumPoints+1. Первая и последняя пары должны совпадать.

    X,Y– координаты любой точки внутри области

    Borde – цвет линии, до которой производится закраска.

    Для построения криволинейных фигур используются процедуры

    Arc(X,Y: integer; StAngle,EndAngle,Radius:Word) построение дуги окружности

    Circle (X,Y: integer; Radius:Word) построение окружности

    Ellipse (X,Y: integer; StAngle,EndAngl,:Word; Xradius,Yradius:Word) построение дуги эллипса

    FillEllips (X,Y: integer; Xradius,Yradius:Word) построение закрашенного эллипса

    PieSlice (X,Y: integer; StAngle,EndAngle,Radius:Word) построение закрашенного сектора круга.

    Sector (X,Y: integer; StAngle,EndAngl,:Word; Xradius,Yradius:Word) построение закрашенного сектора эллипса

    X,Y – координаты центра

    StAngle,EndAngle – угол до начальной (конечной) дуги, отсчитываемый против часовой стрелки от горизонтальной оси, направленной слева направо

    Xradius,Yradius –горизонтальные и вертикальные полуоси эллипса.

    Для работы с текстом используются следующие процедуры

    OutText (TextString:string) вывод последовательности символов

    OutTextXY (X,Y: integer; TextString:string) вывод последовательности символов, начиная с заданных координат.

    SetTextJustify (Horiz,Vert:Word) устанавливает способ выравнивания текста

    Horiz 0 – левое выравнивание

    1 – Выравнивание по центру

    2 – правое выравнивание

    Vert 0 - Нижнее выравнивание

    2 –Верхнее выравнивание

    SetTextStyle (Font:Word: Direction:Word; CharSize:word) устанавливает текущие тип шрифта, направление текста и размер символов

    Font 0 –Default Font

    1 - TriplexFont

    2 - SmallFont

    3 - SansSerifFont

    4 - GoticFont

    Direction 0 – горизонтальное расположение строк

    1 –вертикальное расположение строк

    CharSize 0 – размер шрифта задается пользователем

    SetUserCharSize(MultX, DivX, MultY, DivY:Word) задает коэффициенты увеличения штриховых шрифтов.

    MultX./ DivX – коэффициент увеличения ширины символов

    MultY/ DivY– коэффициент увеличения высоты символов
    С помощью процедуры ClearDevice осуществляется очистка графического экрана

    С помощью процедур SetActivePage (Page:Word) и SetVisualPage (Page:Word) можно использовать несколько экранных страниц: сначала готовить изображение (SetActivePage), а потом отображать страницу (SetVisualPage)

    Page – номер экранной страницы.

    Функции GetMaxX, GetMaxY возвращают максимальную координату для текущего драйвера в текущем режиме.

    А Функции GetX, GetY возвращают соответствующую текущую координату.
    В качестве примера использования ресурсов модуля Graph рассмотрим программу, которая изображает график функции exp(-Ax)*sin(x) при изменении коэффициента А.
    Program Exampl;

    Uses Graph;

    Const ExpBeg = 0.1;

    DeltaExp = 0.1;

    Var X0, Y0: Word;

    X,Y: real;

    i, j :word;

    GraphDriver, GraphMode: integer;

    Switch: Boolean;

    Begin

    GraphDriver:=Detect;

    InitGraph(GraphDriver, GrapMode, ’’);
    If GraphResult<>grOk then

    Writeln(‘Ошибка при включении графического режима’)

    Else

    Begin

    X0:=20;

    Y0:=GetMaxY div 2;

    Swith := True;

    For j:= 0 to 10 do

    Begin

    SetActivePage(Org(Switch));

    SetBkColorBlue);

    SetColor(White);

    ClearDevice;

    Line (X0, 20, X0, GetMaxY – 20);

    Line (X0, Y0, GetMaxX – 20,Y0);

    MoveTo(X0,Y0);

    For i:=1 to GetMaxX – 40 do

    Begin

    X:=i * 4 * Pi / (GetMaxX – 40);

    Y := Exp (-X * (ExpBeg + DeltaExp * j)) * Sin(X);

    LineTo(X0+i, Y0 – round (Y * 150));

    End;

    SetVisualPage(ord(Switch));

    Swith := not Switch;

    End;

    CloseGraph;

    End;

    Readln;

    End/
    Задание. Разобрать приведенный пример.

    Строя небольшие программы разобрать возможности всех приведенных процедур и функций.
    Примечание. В работе перечислены не все процедуры и функции модуля, а также почти не указывались типы и переменные.
    Отчетность. Зачет по работе будет проводиться на одном из последующих занятий с помощью билетов, содержащих задание на программирование с использованием модуля GRAPH.


    написать администратору сайта