Вопросы темы:
Пример 1 Нарисовать отрезок прямой.
Пример 2 Нарисовать через весь экран горизонтальную и вертикальную линии, пересекающиеся в центре монитора.
Пример 3 Написать программу построения графика функции y=x2 для x[-1;1]
Пример 4 Изобразить на экране прямоугольный треугольник с вершинами (320, 10), (120,210), (520,210).
Для использования графических возможностей Турбо Паскаля необходимо в блоке описания 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.