|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
РАБОТА С ГРАФИКОЙТурбо-Паскаль дает возможность выводить на экран рисунки, чертежи, графики функций, диаграммы. Все это называют машинной графикой. В стандарте Паскаля графический вывод не предусмотрен. Но есть мощная графическая библиотека, оформленная в виде модуля Graph, для подключения которого необходимо в начале программы написать: Uses Graph; Для вывода графических изображений необходимо перевести экран в графический режим. Графический режим характеризуется: * количеством точек (пикселов) по горизонтали и вертикали, светимостью которых можно управлять, обращаясь к ним по координатам. Координата верхнего левого угла - (0,0); координата Х изменяется слева направо, максимальная координата по Х определяется функцией GetMaxX; координата Y изменяется сверху вниз, максимальную координату по Y определяет функция GetMaxY. * количеством воспроизводимых на экране цветов (палитра). Допустимые графические режимы зависят от типа используемого монитора и соответствующего графического драйвера компьютера. Для установки графического режима используется процедура: Procedure InitGraph (Var Driver, Mode: integer; Path: string). Driver определяет тип графического драйвера, Mode - режим работы графического драйвера, Path - путь до файла графического драйвера. Таким образом, для инициации графического режима необходима следующая последовательность операторов: Uses Graph; Var Driver, Mode: integer; Begin Driver:= Detect; {автоматическое определение типа драйвера и установка режима} InitGraph (Driver, Mode, ‘C:\TP7\BGI’); ....... CloseGraph; {отмена графического режима и возврат в текстовый режим} end. В графическом режиме используются следующие операторы: Цвет фона SetBkColor (цвет); цвет может иметь значение 0¸7 или эквивалентное английское название Цвет рисунка SetColor (цвет); цвет может иметь значение 0¸15. (соответственно: 0 - Black - черный; 1 - Blue - синий; 2 - Green - зеленый; 3 - Cyan -голубой; 4 - Red - красный; 5 - Magenta - фиолетовый; 6 - Brown - коричневый; 7 - LightGrey - светло-серый; 8 - DarkGrey - темно-серый; 9 - LigthBlue - ярко-голубой; 10 - LigthGreen - ярко-зеленый; 11 - LigthCyan - ярко-голубой; 12 - LigthRed - розовый; 13 - LigthMagenta - малиновый; 14 - Yellow - желтый; 15 - White - белый; 128 - Blink - мерцающий). Высвечивание точки с координатами Х, Y на экране PutPixel (X, Y, цвет). Перемещение курсора в точку (Х, Y) MoveTo (X, Y). Прямая линия между точками (X1, Y1) и (X2, Y2) Line (X1, Y1, X2, Y2). Прямая линия от текущей точки до точки (X, Y) LineTo (X, Y). Прямоугольник с верхним левым углом (X1, Y1) и нижним правым (X2, Y2) Rectangle(X1, Y1, X2, Y2). Закрашенный прямоугольник с верхним левым углом (X1, Y1) и нижним правым (X2, Y2) Bar (X1, Y1, X2, Y2). Установление цвета закраски SetFillStyle (штриховка, цвет). (штриховка: 0 - цвет фона; 1 - сплошная; 2 - ‘- - - ‘; 3 - ‘///’; 4 -‘ ///’ утолщенные; 5 - ‘\\\’ утолщенные; 6 - ‘\\\’; 7 - клетка; 8 - косая клетка; 10 - редкие точки; 11 - частые точки). Закрашивание области FloodFill (X, Y, цвет границы), где X, Y - координаты точки внутри области. Окружность Circle (X, Y, радиус). Задача 1. Нарисуйте домик в графическом режиме. Решение. {рисование домика} Uses Graph; Var Driver, Mode: integer; begin {переход в графический режим} InitGraph (Driver, Mode, ‘C:\TP7\BGI’); SetBkColor (6); {фон - коричневый} SetColor (2); {цвет линий - зеленый} Rectangle (200, 200, 400, 400); Line (200, 200, 300, 150); Line (300, 150, 400, 200); {рисование окна} Rectangle (250, 250, 350, 350); Line (250, 280, 350, 280); line (300, 280, 300, 350); {рисование солнышка} SetColor (14); {цвет линий - желтый} Circle (100, 100, 30); {рисование лучей} Line (65, 100, 40, 100); Line (100, 65, 100, 40); Line (135, 100, 160, 100); Line (100, 135, 100, 160); Line (125, 125, 145, 145); Line (55, 55, 75, 75); Line (125, 75, 145, 55); Line (55 145, 75, 125); readln; CloseGraph; end.
Упражнения. 1. Нарисуйте домик в символьном режиме, используйте при этом процедуры модуля CRT (GoToXY (x, y) - перемещение курсора в точку с координатами (x, y); TextBackGround (цвет) - цвет фона; TextColor (цвет); ClrScr - очистка экрана). 2. Нарисуйте в графическом режиме лампочку, которая зажигается и гаснет.
3. Нарисуйте в графическом режиме паровозик. 4. Измените программу таким образом, чтобы паровозик двигался. Примечание: движение получается, если каждый раз рисовать паровозик на новом месте. При изменении координаты Х с отрицательным шагом паровозик будет двигаться влево, иначе - вправо. 5. Измените программу так, чтобы паровозик уезжал за пределы экрана и возвращался с другой стороны. Задача 2. Нарисуйте график функции y = |x - 2| на отрезке - 25 до 25. Решение. Сначала необходимо начертить оси координат и подписать их. Оси необходимо выбирать таким образом, чтобы они пересекались. Поскольку мы перенесли начало координат в точку пересечения осей и направление оси Y изменилось на противоположное, координаты точек на экране будут определяться следующим образом: X = X0 + абцисса; Y = Y0 - ордината, где X0, Y0 - координаты точки пересечения осей X и Y, т.е. центра новой системы координат. Теперь необходимо выбрать масштаб по осям X и Y. Масштаб показывает какая часть экрана изображает единицу графика. Чтобы задать масштаб необходимо определить размеры экрана, отводимые под график. Для определенности будем считать, что весь экран будет отведен под график, поэтому: mx = GetMaxX/(Xmax - Xmin + 1) = GetMaxX/(25 - (-25) + 1). Для оси Y необходимо определить Ymax и Ymin (соответственно |-25 -2| = 27 и 0). Весь график будет выше оси X. Будем использовать для изображения отрезка [0; 27] GetMaxY div 2 точек, поэтому my:= GetMaxY div 2/ 30. Затем необходимо нанести единицы измерения на оси, ось Х разметим с шагом 5, ось Y - с шагом 1. Теперь можно приступить к построению графика функции. Будем строить графики, соединяя соседние точки линейными отрезками. Для достижения плавности нужно увеличивать количество точек. Uses Graph; var driver, mode: integer; {для инициализации графического режима} x0, y0: integer; { координаты центра} x, y, i: integer; { координаты текущей точки i - счетчик циклов} mx, my: real; {масштабы} s: string; {для разметки осей} begin driver:= detect; InitGraph (driver, mode, ‘C:\TP7\BGI’); SetBkColor (7); SetColor(1); x0:= GetMaxX div 2; y0:= GetMaxY div 2; {рисуем оси координат} {ось X} line (0, y0, GetMaxX, y0); line (GetMaxX, y0, GetMaxX - 10, y0 -10); {прорисовка} line (GetMaxX, y0, GetMaxX - 10, y0 +10); {®} OutTextXY (GetMaxX - 10, y0 - 15, ‘X’); {ось Y} line (x0, 0, x0, GetMaxY); line (x0, 0, x0 - 10, 10); {прорисовка} line (x0, 0, x0 + 10, 10); {} OutTextXY (x0 - 20, 5, ‘Y’); mx:= GetMaxX/(25 - (-25 + 2)); my:= GetMaxY div 2/30; {нанесение единиц измерения на оси} for i:= -25 to 25 do begin x:= x0 + round (i * mx); if i mod 5 = 0 then begin line (x, y0 - 2, x, y0 + 2); str (i, s); OutTextXY (x + 4, y0 + 2, s) end; end; for i:= -30 to 30 do begin y:= y0 - round (i * my); if i mod 5 = 0 then begin line (x0 - 2, y, x0 +2, y); str (i, s); OutTextXY (x0 + 4, y, s) end; end; {вывод графика} x:= x0 + round (-25 * mx); y:= y0 - round (30 * my); MoveTo (x, y); for i:= - 24 to 25 do begin x:= x0 + round (i * mx); y:= y0 + round (abs(i - 2) * my); end; OutTextXY (x0 + 50, y0 + 200, ‘график функции y = |x-2|’); readln; CloseGraph; end.
Упражнения. 1. Напишите программу вывода графика функции y = ïx - 2ïна участке - 25 до 25 в символьном режиме. 2. Напишите программу вывода в графическом режиме графика функции y = a + sin (x - b) на отрезке - 10 до 15. Задача 3. Выведите на экран орнамент. Повторяющийся фрагмент выделен пунктиром. Прорисовка этого фрагмента будет оформлена в виде процедуры. В качестве параметров используются координаты верхнего левого угла.
Uses Graph; var driver, mode: integer; x, y: interger; procedure cadr (x, y: integer); begin rectangle (x + 10, y + 10, x + 30, y + 30); line (x, y, x + 10, y + 10); line (x + 40, y, x + 30, y + 10); line (x, y + 40, x + 10, y + 30); line (x + 40, y + 40, x + 30, y + 30); end; begin {тело основной программы} driver:= detect; InitGraph (driver, mode, ‘C:\TP7\BGI’); x:= 0; while x <= GetMaxX do begin y:= 0; while y <= GetMaxY do begin cadr (x, y); y:= y + 40 end; x:= x + 40; end; readln; CloseGraph; end. Упражнения. 1. Внести такие дополнения в программу, чтобы: · узор был цветным; · у каждой строки узора был свой цвет; · цвет менялся от фрагмента к фрагменту. 2. В примере 3 повторение фрагмента осуществляется сначала по горизонтали, затем по вертикали. Измените программу так, чтобы узор выводился сначала по вертикали, а затем по горизонтали. 3. Измените шаг узора по вертикали и горизонтали. 4. Почему настройка на графический режим сделана в основной программе, а не в процедуре? Как будет работать программа, если сделать настройку в процедуре? 5. Напишите процедуру рисования елочки. Используя эту процедуру, нарисуйте еловый лес. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.022 сек.) |