close

Вход

Забыли?

вход по аккаунту

?

GRAPH приложение

код для вставки
программирование паскаль
Тема:
«Создание графических объектов на языке
PASCAL»
Для создания графических объектов на языке Турбо PASCAL предназначен стандартный
библиотечный модуль Graph. Он представляет собой библиотеку подпрограмм которая
полностью обеспечивает управление графическими режимами различных адаптеров
дисплеев. Библиотека содержит около 60 (для TP5) и около 80 (для TP7) графических
процедур и функций, а так же десятки стандартных констант и описаний типов данных.
Подключение модуля Graph к программе выполняется стандартно т.е. с помощью
зарезервированного слова USES:
USES Graph;
Чтобы запустить программу, в которой используются процедуры модуля Graph,
необходимо поместить в рабочий каталог соответствующие графические драйверы (файлы с
расширением .BGI). Если вы используете шрифты дополните каталог драйверами (.CHR).
Сам модуль Graph представлен в отдельном файле GRAPH.TPU, сделайте его доступным
для компилятора.
Инициализация видеорежима (процедура InitGraph)
Любая программа, предназначенная для работы с графикой обязательно должна содержать
блок вызова процедур графического режима и обращение к процедуре его завершения. В
таком блоке инициализируется графический режим, проверяется правильность
инициализации и если все операции прошли успешно, разрешается дальнейшая работа
программы. Процедура объявляется следующим образом:
InitGpaph (var GraphDriver : INTEGER; {тип адаптера}
var GraphMode : INTEGER; {режим графики}
var DriverPath:STRING );
{путь к драйверу}
Пременные GraphDriver и GraphMode задают драйвер и режим в соответствии со
значениями:
Detect
CGA
MCGA
EGA
EGA64
EGAMono
IBM8514
HercMono
ATT400
VGA
PC3270
CurrentDriver
=0
=1
=2
=3
=4
=5
=6
=7
=8
=9
=10
=-128
Автоопределение
Адаптер CGA
Адаптер MCGA
Адаптер EGA 256K
Адаптер EGA 64K
EGA с монохромным дисплеем
Адаптер 8514
Адаптер Hercules
Для ПК AT&T
Адаптер VGA
Адаптер 3270
Для GetModeRange
Например:
GraphDriver:=EGA;
GraphMode:=EGAHi;
1
В качестве значений можно задать значение константы так и ее значение. Оба параметра
нужно установить до вызова процедуры InitGpaph .
Для перевода системы в режим самоопределения переменной GraphDriver присваивают
значение Detect. Если возможно переключение системы в графический режим, то
инициализируется нужный BGI – драйвер и влючается режим с максимальным разрешением
для предложенного адаптера. Все остальные параметры устанавливаются по умолчанию.
Такая установка GraphDriver рекомендуется в тех случаях, если программа будет работать
на разных компьютерах.
Когда все дейсвия с графикой закончены необходимо корректно завершить работу и
воспользоваться стандартной процедурой без параметров CloseGraph. В процессе ёё
выполнения освобождается оперативная память от загруженных драйверов и
восстанавливается режим работы адаптера. Последующее включение в графический режим
возможно при повторной инициализации.
Например:
{ использование InitGraph }
Uses Graph;
VAR GraphDriver, GraphMode:INTEGER;
{определяет драйвер и режим}
BEGIN
GraphDriver:=Detect; {режим автоопределения}
InitGraph(GraphDriver, GraphMode, ‘’);
{считается, что драйвер расположен в текущем каталоге}
{ошибка инициализации, можно опустить}
If GraphResult<>0 Then Begin
WriteLn(‘Ошибка инициализации графики’);
Halt(1);
End;
SetBkColor(LightBlue); {задание голубого фона}
ReadLn;
CloseGraph;{завершение графического режима}
END.
2
Стандартные процедуры и функции.
При переходе в графический режим для наших компьютеров устанавливается размер экрана
640x480
Arc (x,y: INTEGER; нач_угол, кон_угол, радиус: WORD);
Процедура вычерчивает дугу окружности с цетром в точке (x,y), заданным радиусом. Дуга
рисуется от нач_угла до кон_угла текущим цветом.
Arc (100,120,90,270);
Bar (x1,y1,x2,y2: INTEGER);
Процедура вычерчивает столбец с использованием заданных цвета и типа заполнения.
Где (x1,y1) - координаты левого верхнего угла, (x2,y2) – координаты правого нижнего
угла вычерчиваемого прямоугольника.
Bar (20,30, 120,140);
Bar3D (x1,y1,x2,y2: INTEGER, глубина: WORD, вершина: BOOLEAN);
Процедура вычерчивает закрашенный трехмерный параллелипипед. Контур –
установленным типом и цветом линий, тип и цвет заполнения задается дополнительно
процедурами SetFillStyle или SetFillPattern.
Где (x1,y1) - координаты левого верхнего угла, (x2,y2) – координаты правого нижнего
угла передней грани, глубина – число элементов изображения, задающие высоту
трехмерного контура, если вершина – принимает значения ”True“ , то верхняя часть блока
прорисовывается, иначе - “ False” – вершина не рисуется, что позволяет рисовать блоки один
на другом в виде пирамиды.
Bar3D (50,100,240,180,5,True);
Circle (x,y: INTEGER, радиус: WORD);
Процедура вычерчивает текущим цветом и типом окружность с цетром в точке (x,y) и
указанным радиусом.
Circle(250,250,50);
ClearDevice;
Процедура сбрасывает состояние текущего графического экрана и подготавливает для
вывода новых данных (аналогична ClrScr в текстовом режиме).
3
ClearPort;
Процедура очищает текущее окно вывода.
DrawPoly (кол_верш:WORD, var коорд_верш);
Процедура используя текущий цвет и тип вычерчивает контур замкнутого многоугольника.
Обычно при использовании этой процедуры вершины прямоугольника задают в массиве
специального типа:
TYPE
PointType=RECORD X,Y:INTEGER; {координаты точек}End;
Или
CONST
Triangle: Array[1..3] of PointType= ( (x:50; y:200), (x:100; y:200), (x:250; y:350) );
{координаты для вершин треугольника}
….………………………………………………..
BEGIN
……………………………………………………
DrawPoly (3,Triangle);
End.
Ellipse (x,y: INTEGER, нач_угол, кон_угол: WORD, радX, радY:WORD);
Процедура вычерчивает эллиптическую дугу, используя в качестве центра точку (x,y) и
радиусами радX- горизонтальная ось || OX, радY – вертикальная ось || OY, дуга
вычерчивается от нач_угол до кон_угол текущим цветом и типом линии.
Ellipse ( 150,150, 90,180,50,100);
FillEllipse (x,y: INTEGER, радX, радY:WORD);
Процедура вычерчивает закрашенный эллипс, используя в качестве центра точку (x,y) и
радиусами радX- горизонтальная ось || OX, радY – вертикальная ось || OY, используя
текущий цвет и тип линии.
FillEllipse ( 150,150, 50,100);
4
FillPoly (кол_верш:WORD, var коорд_верш);
Процедура используя текущий цвет и тип вычерчивает закрашенный замкнутый
многоугольник. Координаты вершин задаются как и в процедуре DrawPoly.
FillPoly (3,Triangle);
Line (x1,y1,x2,y2: INTEGER);
Процедура вычерчивает прямую линию из точки (x1,y1) в точку (x2,y2) установленного
типа и цвета. (толщина и тип задают SeLineStyle , SetColor)
Line (10,50,120,140);
LineRel (Dx,Dy: INTEGER);
Процедура вычерчивает линию из последней точки в точку заданную относительным
расстоянием (Dx, Dy) от текущего указателя.
LineRel (100,58);
LineTo (x,y: INTEGER);
Процедура вычерчивает прямую линию из точки в которой находится текущий указатель в
точку (x,y).
LineTo (145,69);
MoveRel (Dx, Dy: INTEGER);
Процедура перемещает текущий указатель из последней точки в точку заданную
относительным расстоянием (Dx, Dy).
MoveRel (50,70);
5
MoveTo (x, y: INTEGER);
Процедура перемещает текущий указатель в точку с координатами (x, y).
MoveTo (150,110);
OutText ( строка:STRING );
Процедура пересылает параметр строка на устройство вывода, начиная с позиции курсора.
OutText (‘Demo text');
OutTextXY ( x,y:INTEGER,строка:STRING );
Процедура пересылает параметр строка на устройство вывода, начиная с позиции курсора
указанного координатами ( x,y ).
OutTextXY (20,50,‘Demo text');
PieSlice (x,y: INTEGER, нач_угол, кон_угол,R: WORD);
Процедура вычерчивает закрашенный сектор с центром (x,y) , радиусом R, от нач_угол
до кон_угол .
PieSlise (100,100,0,90,120);
PutPixel (x,y: INTEGER, цвет:WORD);
Процедура выводит на экран точку с координатами (x,y), заданным цветом.
PutPixel(120,100,2);
Rectangle (x1,y1,x2,y2: INTEGER);
Процедура вычерчивает прямоугольник окрашенный в текущий цвет, где (x1,y1) кординаты
левого верхнего угла, а (x2,y2) – правого нижнего.
Rectangle(40,50,120,100);
6
Sector (x,y: INTEGER, нач_угол, кон_угол: WORD, радX, радY:WORD);
Процедура вычерчивает закрашенный эллиптический сектор, с центром (x,y) , от нач_угол
до кон_угол , горизонтальным радиусом радX и вертикальным радиусом радY.
Sector (200,120,90,180,30,20);
SetBkColor (цвет : WORD);
Процедура устанавливает цвет фона с использованием кодировки.
SetBkColor(2);
SetColor (цвет : WORD);
Процедура устанавливает цвет рисунка с использованием кодировки.
SetColor(14);
SetFillStyle (тип, цвет: WORD);
Процедура устанавливает тип и цвет зарисовки объекта.
Константа
EmplyFill
SolidFill
LileFill
LtSlashFill
SlashFill
BkSlashFill
LtBkSlashFill
HatchFill
XHatchFill
InterLeaveFill
WideDotFill
CloseDotFill
UserFill
SetFillStyle (7,3);
значение
0
1
2
3
4
5
6
7
8
9
10
11
12
Описание узора
Сполшной цветом фона
Сплошной текущим цветом
Типа - - - - - - - Типа / / / / / / нормальной толщины
Типа / / / / / / удвоенной толщины
Типа \ \ \ \ \ \ \ нормальной толщины
Типа \ \ \ \ \ \ удвоенной толщины
Заполнение клеткой
Заполнение косой редкой клеткой
Заполнение косой частой клеткой
Заполнение редкими точками
Заполнение частыми точками
Определяется пользователем
SetFillStyle (CloseDotFill,Yellow);
Используется совместно с процедурами Bar, Bar3D, FillPoly, FillEllips и др.
7
SetLineStyle (тип, шаблон, толщина_линии: WORD);
Процедура устанавливает тип, толщину, шаблон выводимых линий.
Константа
Значение
SolidLn
DottedLn
CenterLn
DashedLn
UserBitLn
NormWidth
TrickWidht
0
1
2
3
4
1
3
Описание узора
Сплошная
Пунктирная
Штрих- пунктирная
Штриховая
Заданная пользователем
Нормальной толщины
Большой толщины
SetLineStyle ( 1, 2, 3 );
SetTextStyle (шрифт, направление, размер_симв: WORD);
Процедура устанавливает тип, направление и размер шрифта.
Константа
Значение
DefaultFont
Triplex
SmalFont
SansSerifFont
GothicFont
0
1
2
3
4
Описание
Матричный
Полужирный
Тонкий
Рубленный
Готический
SetTextStyle (4,1,3);
8
Примеры статических объектов на экране
1. Четыре целых числа определяют положение концов отрезка на экране.
Получить центрально- симметричное изображение относительно точки в цетре экрана.
2. Дано шесть целых чисел, определяющих положение треугольника, расположенного в
левой половине экрана. Провести через середину экрана вертикальную линию. Построить
другим цветом треугольник, симметричный относительно этой прямой.
3. Получить в цетре экрана изображение, состоящее из 6 вложенных квадратов со
сторонами, кратными 20,40, 60…. Окрасить квадраты в различные цвета.
4. Построить пирамиду из 5 параллелипипедов разных размеров, расположенных один над
другим. Окрасить их в различные цвета.
5. Построить пирамиду из 5 “таблеток” различных размеров и цветов.
6. Дана последовательность, состоящая из 70 натуральных чисел. Первые 30 чисел
определяют положение и радиусы 10 окружностей на экране. Остальные 40 чисел –
положние на экране 20 точек:
а) высветить только те окружности, внутри которых содержится хотя бы одна из
предложенных точек;
б) высветить все точки, не попадающие внутрь окружностей и все окружности, не
содержащие ни одну из данных точек.
Примеры заданий для динамических графических объектов
1.
Написать программу перемещения цветной окружности по экрану: слева направо, справа
налево и по диагонали – вправо вниз.
2.
Написать программу, в ходе выполнения которой зеленый квадрат, появившись в левом
углу экрана, перемещается вправо вниз и влево вверх вдоль диагонали экрана.
3.
Написать программу, в ходе которой цветной круг в центре экрана постепенно
увеличивается в 6 раз, а затем сжимается до начальных размеров.
4.
Написать программу, которая имитирует движение мяча по ступеням.
9
Построение диаграмм и гистограмм
Диаграммы и гистограммы – это графическое изображение показателей. Если выполняется
сравнение показателей за ограниченные периоды времени, возможно отобразить их
динамику. Гистограммы, они же столбчатые диаграммы, могут быть выполнены в виде
прямоугольников или в виде параллелепипедов. Фрагменты, относящиеся к одному
временному промежутку, окрашивают одним цветом.
Для гистограммы:
в качестве исходных данных можно использовать результаты успеваемости в данной группе
за прошедшие семестры;
семейный бюджет по статьям доходов и основным расходам.
Для диаграммы:
показатели успеваемости в текущем семестре («на 3», «на 4», «на 5» к общему колличеству
учеников);
семейный бюджет где доходы 100% и показать доли статей расходов (квартплата, телефон,
питание, мелкие расходы, проезд, большие разовые покупки).
Построение графиков математических функций
Данный раздел тесно связан с аналогичной темой в курсе алгебры. Для разбора на доске и
пояснения основных этапов лучше начать с графика функции SIN(X).
Следует обратить внимание на расположение осей координат на экране, на задание
масштаба.
1) Изменение аргумента функции следует задать в градусах например:
FOR X: = -180 TO 180 DO ;
2) При вычислении значения функции будет получен результат типа REAL , который
следует преобразовать в тип INTEGER;
3) Получить график лучше с помощью процедуры вывода точки (или линии);
4) Следует для красивого отображения на экране задать амплитуду графика в пределах
70…120.
5) Следует обратить внимание на смещение осей на картинке по отношению к реальным
координатам экрана:
{getMaxX или}320+X , т.к. направление осей совпадает;
{getMaxY или}240-Y , т.к. направление осей противоположно.
Для самостоятельной проработки – построение графика COS(X);
В физико-математическом классе можно рассмотреть построение TG(X), с указание области
определения и обхода недопустимых значений.
Для закрепления материала самостоятельно построить следующие графики функций:
Y=|X|
[ -400,400];
Y = 5√|X|
[-300,300];
Y = 2X 2 + 1
[-350,350].
10
Автор
ovsianik
Документ
Категория
Образование
Просмотров
9
Размер файла
110 Кб
Теги
стандартный модуль, graph, программирование, паскаль
1/--страниц
Пожаловаться на содержимое документа