К оглавлению

 

 

Урок 32

Тема: Графика Турбо Паскаля

 

Вопросы темы:

1. Графический модуль Graph

    Пример 1 Нарисовать отрезок прямой.

2.  Графические процедуры

3. Графические функции

4. Машинные координаты.

            Пример 2 Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

            Пример 3 Написать программу построения графика функции y=x2 для x[-1;1]  

            Пример 4 Изобразить на экране прямоугольный треугольник с вершинами (320, 10), (120,210), (520,210).

 

 Графический модуль Graph

  

Для использования графических возможностей Турбо Паскаля необходимо в блоке описания uses подключить графический модуль Graph. Модуль содержит набор графических функций и процедур, основные из которых рассмотрены ниже.

 

Простейшая программа может иметь вид:  


В начало

 

Пример 1. Нарисовать отрезок прямой.

 

PROGRAM  Primer_1;

      uses Graph;

      var  Gd,Gm: Integer;

   BEGIN

      Gd:=VGA;   { Графический адаптер - VGA         }

      Gm:=VGAHi; { Графический режим VGAHi (640x480) }

      InitGraph (Gd,Gm,'..\bgi'); { Включить графический режим }

      If  GraphResult=grOk

         then { Если режим включился успешно }

              { Нарисовать отрезок прямой }

              Line (0,0,639,479); ReadLn

   END.

 

Мы видим, что у процедуры InitGraph три параметра. В качестве первых двух фактических параметров должны стоять имена целых (integer) переменных. Не будем вдаваться в подробности, почему это так; вместо этого выясним их предназначение.

Первый параметр является кодом графического адаптера (т.е. электронной схемы, управляющей выводом информации на экран). (Дело в том, что на IBM-совместимых компьютерах применяется ряд стандартных графических адаптеров, носящих названия CGA, EGA, VGA.)

По нашей программе можно догадаться, что в используемых нами компьютерах используется адаптер VGA, и компилятор сам "узнает" слово VGA и заменит его на нужное целое число (на самом деле равное 9, но мы этого можем и не запоминать).

Каждый графический адаптер позволяет использовать несколько графических режимов, отличающихся количеством цветов и разрешающей способностью. И второй из параметров как раз предназначен для того, чтобы указать, какой из графических режимов следует включить. Пока что мы ограничимся лишь одним графическим режимом VGAHi. Третий параметр является строкой, содержащей путь к файлу, который называется EGAVGA.BGI. В этом файле содержится драйвер (такая специальная программа), необходимый для работы с адаптерами EGA и VGA. И, как легко увидеть из нашего примера, файл этот находится в подкаталоге TPBGI.

 

В начало

 

Графические процедуры

 

Arc(x,y:integer;St,En,R:word); {рисование дуги, где x,y - коорд. центра дуги, R - радиус, St, En - нач. и конечный углы.}

 

ClearDevice; {очистка экрана}

 

Circle(x,y:integer;R:word); {окружность радиуса R

C центром в точке (x,y)}

 

CloseGraph; {закрытие графики}

 

InitGraph(gd,gm:integer;Path:string); {инициализация графики, где

gd - графический драйвер,

gm - графический режим,

Path - путь размещения файла

с расширением .bgi.}

 

Line(x1,y1,x2,y2:integer); {рисование линии, проходящей через две точки:

с координатами (x1,y1) и (x2,y2) }

 

LineRel(dx,dy:integer); {рисование линии: dx, dy – приращения

координат к координатам текущей

позиции курсора}

 

LineTo(x,y:integer); {рисование линии, проходящую через текущую

позицию курсора и точку с координатами (x,y)}

 

Moveto(x,y:integer); {задание координат текущей точки}

 

OutText(T:string); {вывод текста в текущую точку}

 

OutTextXY(x,y:integer;T:string);{вывод текста в точку с координатами х,у}

 

Rectangle(x1,y1,x2,y2:integer); {рисование прямоугольника: (x1,y1) и (x2,y2) - координаты противоположных вершин}

 

PutPixel(x,y:integer;c:word); {выводит точку с координатами (х,у) цветом с}

 

 

Графические функции

GetMaxX - определяет максимальный размер экрана по оси x.

GetMaxY - определяет максимальный размер экрана по оси y.

GetX - координата текущей позиции курсора по оси x.

GetY - координата текущей позиции курсора по оси y.

 

В начало

 

Машинные координаты

Для того, чтобы мы могли что-либо нарисовать на экране, нам нужно уметь задавать положение на экране того, что мы рисуем. Для этого с экраном связывается система координат следующего вида:

   (0,0)                                          X

  

 

 

 

 

 

 

 

 


 

Y

Каждая точка на экране на самом деле представляет собой очень маленький прямоугольник (и поскольку это не совсем точка, то иногда используют специальный термин - "пиксел"). Количество точек (пикселов), умещающихся на экране по вертикали и горизонтали, называют разрешающей способностью. Разрешающая способность экрана в режиме VGAHi - 640x480. Это означает, что по горизонтали на экране умещается 640 точек, а по вертикали - 480.

Точка в левом верхнем углу экрана имеет координаты (0,0). Координата X любой точки экрана лежит в пределах от 0 до 639, а координата Y - в пределах от 0 до 479.

 

Начало машинной системы координат, направление осей, а также максимальные значения координат монитора показаны на рисунке

На рисунке приведена также машинная (xm, ym) и физическая (x,y) системы координат. Для изображения на экране точки с физическими координатами (x,y) необходимо определить ее машинные координаты (xm, ym). Расчетные формулы имеют следующий вид (попробуйте самостоятельно получить эти формулы):

 

xm=x0+x*Mx ,

ym=y0-y*My,

где Mx, My-масштабы соответственно по осям x и y, которые показывают число пикселей в одной физической единице,

x, y- физические координаты точки,

xm, ym- машинные координаты точки,

x0, y0- машинные координаты начала физической системы координат.

 

В начало

 

Пример 2. Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.

Этапы разработки программы сведены в таблицу.

 

Таблица

N Этапы программирования Выполнение
1. Постановка задачи Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.
2. Математическое описание Изобразим вид экрана с указанием координат

требуемых линий

 

3.

Разработка структограммы
4. Написание программы Program P5;

Uses graph; {подключение граф.модуля}

Var gd,gm:integer;

Begin

gd:=detect;{определение граф. драйвера}

InitGraph(gd,gm,’ ‘);{инициализация

графики}

Line(0, round(GetMaxY/2), GetMaxX,

Round(GetMaxY/2));{гориз. лин.}

Line(round(GetMaxX/2), 0,

Round(GetMaxX/2), GetMaxY);

{вертик. лин.}

Readln; {пустой ввод}

CloseGraph; {закрытие графики}

End.

5. Отладка и получение результатов Выполнить самостоятельно


В начало

 

Пример 3. Написать программу построения графика функции y=x2 для x[-1;1].

Этапы разработки программы сведены в таблицу.

 

Таблица

N Этапы программирования Выполнение
1. Постановка задачи Построить график функции y=x2 для x∈[-1;1].
2. Математическое описание Изобразим вид экрана, который мы хотели бы получить после выполнения программы.

3. Разработка структограммы
4. Написание программы Program P6;

Uses graph;

Var gd,gm:integer;

x,y:real;

x0,y0,xm,ym,Mx,My:integer;

begin

gd:=detect;

InitGraph(gd,gm,’ ‘);

Mx:=300; x0:=320; My:=440; y0:=460;

{выбраны для монитора 640×480 пикс.}

For xm:=20 to 620 do

Begin

x:=(xm-x0)/Mx;

y:=sqr(x);

ym:=round(y0-y*My);

PutPixel(xm,ym,1);

End;

Readln;

CloseGraph;

End.

5. Отладка и получение результатов Выполнить самостоятельно

 

В начало

 

Пример 4. Изобразить на экране прямоугольный треугольник с вершинами (320, 10), (120,210), (520,210).

 

PROGRAM  Primer_2;

      uses Graph;

      var  Gd,Gm: Integer;

   BEGIN

      Gd:=VGA; Gm:=VGAHi; InitGraph (Gd,Gm,'..\bgi');

      If  GraphResult=grOk

         then  begin

                  Line (120,210,520,210); { Горизонтальный отрезок }

                  Line (120,210,320,10);  { Левый катет            }

                  Line (320,10,520,210);  { Правый катет           }

                  ReadLn

               end;

   END.

 

   В начало

 

            К оглавлению

Сайт управляется системой uCoz