Реферат: Обучающая программа Графика программированию в графическом режиме на языке turbo-pascal 7.x
динамической области ОЗУ
програмы графического драйвера.
Имеется ряд операторов
для получения справок о текущем
графическом режиме:
* function
GetDriverName:string; -
Возвращает
строковое название
текущего графического адаптера.
* function
GetModeName(ModeNumber:integer):string -
Возвращает строковое название
требуемого графического режима.
* function
GetMaxMode:integer -
Возвращает максимальный номер
графического режима для текущего
адаптера.
* procedure
GetModeRange(GraphDriver:integer;
*
var LowMode,HighMode:integer); -
Выдает справку о
диапазоне номеров графических режимов задан-
ного графического адаптера.
Возвращаемые параметры LowMode и
HighMode означают
минимальный и максимальный номера графических
режимов, соответственно.
* function
GetGraphMode:integer; -
Возвращает номер текущего графического режима.
ПРОГРАММИРОВАНИЕ ГРАФИЧЕСКИХ РЕЖИМОВ
* procedure
GetAspectRatio(var Xasp, Yasp:word); -
Возвращает в своих параметрах ввеличины
дискретов
экрана по осям X и Y ,сооответственно.
0
УПРАВЛЕНИЕ КУРСОРОМ И ПОЛЕМ
РИСОВАНИЯ
В графическом режиме
также как и в текстовом положение выво-
димых на экран данных в
каждый момент времени определяется курcо-
ром. Однако, в этом
случае курсор невидим. При вхождении в гра-
фический режим с помощью
процедуры InitGraph курсор автоматически
помещается в левый верхний
угол экрана, фон экрана принимает первый
(черный) цвет палитры. Для
определения и изменения положения курсора
без рисования в TURBO-PASCAL
предусмотрены операторы MoveTo,MoveRel,
GetX,GetY.
* procedure MoveTo(x,y:integer);
где x,y - координаты по
горизонтали и вертикали соответственно
в отсчете от левого верхнего
угла экрана.
* procedure
MoveRel(Dx,Dy:integer);
Смещает курсор без
рисования относительно его текущего поло-
жения. Dx, Dy - смещения
курсора по координатам x и y.
* function GetX: word;
Определяет для курсора
значение координаты X.
* function GetY: word;
Определяет для курсора
значение координаты Y.
УПРАВЛЕНИЕ
КУРСОРОМ И ПОЛЕМ РИСОВАНИЯ
При управлении положением
курсора полезными оказываются также
справочные функции GetMaxX и
GetMaxY, которые возвращают координаты
самой правой и самой нижней
возможных графических позиций курсора,
соответственно, для текущего
графического драйвера и режима.
* procedure ClearDevice;
Очищает экран от следов
предшествовавшего рисования и восста-
навливает исходные параметры
графики.
* procedure
SetViewPort(X1,Y1,X2,Y2:word;Clip:boolean);
Устанавливает
прямоугольное окно рисования с перемещением
курсора в левый верхний угол
окна. Параметры процедуры имеют следу-
ющий смысл:(X1,Y1) и (X2,Y2)
определяют соответствввенно координаты
левого верхнего и правого
нижнего углов окна, а Clip принимает
значение true при
необходимости отсечения изображения за границами
окна и false, когда этого
делать не надо .
* procedure
ClearViewPort;
Очищает текущее окно,
заполняя его первым цветом текущей
цветовой палитры, и
переводит курсор в левый верхний угол окна.
* procedure GetViewSettings(var
ViewPortType);
Возвращает параметры
активного окна просмотра в переменной
ViewPort. Тип ViewPortType
описан в модуле Graph.
0
ФОРМИРОВАНИЕ ПРЯМОЛИНЕЙНЫХ
МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
В данном разделе не
рассматривается управление
цветом и стилем рисования и
закрепляется за
фоном светло-серый, а за
курсором синий цвет.
* procedure
LineTo(X,Y:integer);
щ
Проводит отрезок прямой
от текущего положения
курсора к заданной точке
(X,Y).
* procedure
LineRel(Dx,Dy:integer);
2
Рисует отрезок прямой по
направлению к точке,
смещенной от текущего
положения курсора на рас-
стояние Dx и Dy по осям OX и
OY .
* procedure
Line(X1,Y1,X2,Y2:integer);
3
Проводит прямую между
точками (X1,Y1) и
(X2,Y2).
После выполнения этой и
последующих процедур
курсор возвращается в
предшествующее положение.
ФОРМИРОВАНИЕ
ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
* procedure
Rectangle(X1,Y1,X2,Y2:integer);
4
Строит контуры прямоугольника
с координатами
левого верхнего (X1,Y1) и
нижнего правого
(X2,Y2) углов.
* procedure
Bar(X1,Y1,X2,Y2:integer);
5
Строит прямоугольник,
закрашенный текущим цветом
и орнаментом заполнения.
(X1,Y1), (X2,Y2) -
координаты левого верхнего и
правого нижнего
углов соответственно.
* procedure
Bar3D(X1,Y1,X2,Y2:integer;
*
Depth:word;Top:boolean)
6
Рисует аксонометрию
закрашенного по фасаду
прямоугольного
параллелепипеда.
(X1,Y1),(X2,Y2) - координаты
левого верхнего и
правого
нижнего углов
прямоугольного фасада.
Depth - ширина боковой грани
(отсчитывается по
годизонтали.
Top - признак включения
верхней грани.
ФОРМИРОВАНИЕ
ПРЯМОЛИНЕЙНЫХ МОНОХРОМНЫХ ИЗОБРАЖЕНИЙ
* procedure
DrawPoly(NumPoints:word;
* var
PolyPoints);
7Строит ломаную линию.
NumPoints - число вершин
многоугольника
PolyPoints - переменная без
типа, содержащая
NumPoints+1 пар координат
вершин многоугольника
(первая и последняя вершины
должны совпадать).
* procedure
FillPoly(NumPoints:word;var PolyPoints);
8
Закрашивает многоугольник
текущим цветом и
орнаментом. Параметры
NumPoints и PolyPoints
именют тот же смысл и тип,
что и одноимеынные
параметры процедуры
DrawPoly.
0
01С ПОМОЩЬЮ КАКИХ ПРОЦЕДУР
МОЖНО НАИБОЛЕЕ РАЦИОНАЛЬНО ПОСТРОИТЬ
ОТРЕЗОК , ЕСЛИ ИЗВЕСТНЫ
КООРДИНАТЫ КОНЦОВ?
1 LineTo(X,Y);
Line(X1,Y1,X2,Y2);
2 Line(X1,Y1,X2,Y2);
DrawPoly(NumPoint,PolyPoints);
3 LineTo(X,Y);
Line(X1,Y1,X2,Y2);
DrawPoly(NumPoint,Poly
Points);
4 Line(X1,Y1,X2,Y2);
*
02КАК ПОСТРОИТЬ СТОЛБЧАТУЮ
ДИАГРАММУ В ЗАРАНЕЕ СФОРМИРОВАННОЙ РАМКЕ?
1
1
Bar3D(X1,Y1,X2,Y2,Depth,true);
SetViewPort(X1,Y1,X2,Y2,false);
ClearViewPort;
Bar3D(X1,Y2,X2,Y3,Depth,false);
2
Bar3D(X1,Y1,X2,Y2,Depth,true);
SetViewPort(X1,Y1,X2,Y2,Depth,true);
ClearViewPort;
Bar3D(X1,Y1,X2,Y3,Depth,false);
3
Bar3D(X1,Y1,X2,Y2,Depth,true);
Bar3D(X1,Y2,X2,Y3,Depth,false);
4
Bar3D(X1,Y1,X2,Y2,Depth,true);
Bar3D(X1,Y2,X2,Y3,Depth,true);
*
03КАК НА ПОЛНОСТЬЮ
ЗАКРАШЕННОМ ЭКРАНЕ ПОЛУЧИТЬ НЕЗАКРАШЕННУЮ ПРЯМОУ-
ГОЛЬНУЮ ОБЛАСТЬ?
1 Bar(X1,Y1,X2,Y2);
SetViewPort(X1,Y1,X2,Y2,true);
ClearViewPort;
2 Bar(X1,Y1,X2,Y2);
3
Bar3D(X1,Y1,X2,Y2,Depth,true);
4 Bar3D(X1,Y1,X2,Y2,false);
*
04КАК ИСКЛЮЧИТЬ ПОЯВЛЕНИЕ НА
ЭКРАНЕ ЗАТЕНЯЕМЫХ КОНТУРОВ НИЖНЕГО
2 ПАРАЛЛЕЛЕПИПЕДА В ОБЬЕМНОЙ
СТОЛБЧАТОЙ ДИАГРАММЕ?
1 Использовать процедуру
Bar3D дважды. построенный верхний парал-
лелепипед
"закроет" автоматически верхнюю грань нижнего парал-
лелепипеда.
2 Установить параметр
Top=false в процедуре Bar3D при построении
нижнего
параллелепипеда.
3 Установить параметр
Top=false в процедуре Bar3D при построении
верхнего
параллелепипеда.
4 Построить ломаную
линию соответствующую контурам верхней грани
нижжнего
параллелепипеда с помощью процедуры DrawPole и закра-
сить его в белый цвет
с помощью процедуры FillPole.
*
05КАК НА ЭКРАНЕ ЗАКРАСИТЬ
БЕЛЫМ ЦВЕТОМ ОБЛАСТЬ, ОГРАНИЧЕННУЮ ЗВЕЗДОЙ?
1 Построить звезду с
помощью процедуры DrawPole(10,zve),где zve -
константа типа
PointType, является массивом координат вершин
фигуры и содержит 10
элементов.
2 Использовать процедуру
DrawPole(10,zvez) , где константа zvez
содержит 11 элементов.
3 Применить процедуру
FillPole(10,zves), где константа zves содер-
жит 11 элементов.
4 Установить цвет
рисования белый и с помощью процедуры
FillPole(10,zves)
построить звезду, закрашенную белым цветом.
*
06С ПОМОЩЬЮ КАКОЙ ПРОЦЕДУРЫ
ИЛИ ФУНКЦИИ ВОЗМОЖНО УСТАНОВИТЬ СТРОКОВОЕ
НАЗВАНИЕ ТЕКУЩЕГО
ГРАФИЧЕСКОГО АДАПТЕРА?
1 Функция
GetDriverName;
2 Функция
GetModeName(ModeNumber);
3 Функция GetMaxMode;
4 Процедура GetModeRange(GraphDriver;LowMode,HighMode);
*
07СУЩЕСТВУЕТ ЛИ ВОЗМОЖНОСТЬ
ОПРЕДЕЛЕНИЯ ЗНАЧЕНИЯ КООРДИНАТ КУРСОРА.
1 Нет
2 Да, с помощью
функций GetX, GetY.
3 Да, с помощью
функций GetMaxX, GetMaxY.
4 Да, с помощью
функции MoveRel.
*
08С ПОМОЩЬЮ КАКОГО ФРАГМЕНТА
ПРОГРАММЫ МОЖНО ВЫВЕСТИ НА ЭКРАН
3 СЛЕДУЮЩУЮ КАРТИНКУ? КУРСОР
НАХОДИТСЯ В ТОЧКЕ (X1,Y1).
1 Line(X,Y,X1,Y1);
MoveRel(X,Y+dY);
Line(X,Y+dY,X1,Y1);
MoveRel(0,dY);
LineTo(X1,Y1);
2 LineTo(X1,Y1);
LineRel(0,dY);
LineRel(0,2dY);
3 LineTo(X,Y);
MoveRel(0,dY);
Line(X,Y+dY,X1,Y1);
MoveRel(0,dY);
Line(X,Y+2dY,X1,Y1);
4 LineTo(X,Y);
LineRel(0,dY);
LineRel(0,2dY);
*
09ГДЕ ПОМЕЩАЕТСЯ КУРСОР И
КАКОЙ ФОН ЭКРАНА УСТАНАВЛИВАЕТСЯ ПРИ
ВХОЖДЕНИИ В ГРАФИЧЕСКИЙ
РЕЖИМ С ПОМОЩЬЮ ПРОЦЕДУРЫ InitGraph?
1 Курсор помещается в
центр экрана и устанавливается черный
цвет фона экрана.
2 Курсор помещается в
правый верхний угол экрана и устанав-
ливается черный цвет
фона экрана.
3 Курсор помещается в
левый верхний угол экрана и устанавлива-
ется черный цвет
фона экрана.
4 Курсор помещается в
левый верхний угол экрана и устанавлива-
ется белый цвет фона
экрана.
*
10С КАКОЙ ЧАСТОТОЙ ОБНОВЛЯЕТ
ЭКРАН КОНТРОЛЛЕР ДИСПЛЕЯ ПЭВМ IBM?
1 50-60 раз/сек
2 20-40 раз/сек
3 100-120 раз/сек
4 200 раз/сек
*
0
011Процедуру LineTo(X,Y)
можно использовать только в случае, когда 002
один из концов отрезка
совпадает с положением курсора.
*
2Ответ правильный. Однако,
применение процедуры DrawPoly в данном 004
случае не является
рациональным.
*
3Процедуру LineTo(X,Y)
можно использовать только в случае, когда один002
из концов отрезка
совпадает с положением курсора. Процедура DrowPoly
не является в данном
случае рациональной.
*
4Ответ
правильный. 005
*
*
021Отввет неверный. Верхний
параллелепипед будет иметь очищенную перед-002
нюю грань. Это не
требуется по условию задачи. При этом неверно
указаны параметры
процедуры Bar3D при построении второго параллеле-
пипеда.
*
2Неправильно указаны
параметры процедуры SetViewPort. Координаты окна002
отсчитываются от левого
верхнего угла экрана в то время как для про-
цедуры Bar3D от левого
верхнего угла окна.
*
3Ответ
правильный. 005
*
4Ответ не точный.На экране
появятся затененные контуры нижнего парал-003
лелепипеда.
*
*
031Ответ не точный.Процедуры
SetViewPort и ClearViewPort в данном слу- 003
чае излишние,т.к.уже
процедура Bar рисует прямоугольную область,
которую закрашивает первым
цветом палитры, если цвет не задан ранее
*
2Ответ
правильный 005
*
3Процедура Bar3D рисует
аксонометрию прямоугольного параллелепипеда,а002
не прямоугольную область.
*
4Процедура Bar3D рисует
аксонометрию прямоугольного параллелепипеда,а002
не прямоугольную область.
*
*
041Ответ неверный. Процедура
Bar3D рисует контуры аксонометрии закра- 002
шенного по фасаду
параллелепипеда. Боковая и верхняя грани не закра-
шиваются, т.о.
затемненная часть верхней грани нижнего параллелепи-
педа не исчезнет.
*
2Ответ
правильный. 005
*
3Ответ неверный. Параметр
Top процедуры Bar3D регулирует наличие или 002
отсутствие верхней (а не
нижней) левой грани аксонометрии.
*
4Ответ неверный.
Достаточно установить параметр Top=False процедуры 002
Bar3D. Дополниетльные
меры излишне.
*
*
051Ответ неверный. Процедура
DrawPoly построит звезду с одной невидимой002
гранью. Цвет фигуры будет
соответствовать цвету фона.
*
2Ответ неверный. Цвет
фигуры будет соответствовать цвету фона и будет002
белым только в случае,
когда фон экрана белый.
*
3Ответ
правильный. 005
*
4Ответ правильный. Однако,
закраска белым цветом возможна и 004
по умолчанию.
*
*
061Ответ
правильный. 005
*
2Ответ неверный. Функция
GetModeName возвращает строковое название 002
требуемого графического
режима для текущего адаптера.
*
3Ответ неверный.Функция
GetMaxMode возвращает максимальный номер 002
графического режима для
текущего адаптера.
*
4Ответ неверный. Процедура
GetModeRange выдает справку о диапазоне 002
номеров графических
режимов заданного графического адаптера.
*
*
071Ответ неверный. Такая
возможность существует. 002
*
2Ответ
правильный. 005
*
3Ответ неверный. Данные
процедуры возвращают максимально возможные 002
для текущего драйвера и
режима графические позиции курсора.
*
4Ответ неверный. Процедура
MoveRel смещает курсор относительно его 002
текущей позиции.
*
*
1081Ответ неверный. Рисунок
будет иметь следующий вид: 002
*
2 2Ответ неверный.Рисунок
будет иметь следующий вид: 002
*
3Ответ
правильный. 005
*
3 4Ответ неверный. рисунок
будет иметь следующий вид: 002
*
*
091Ответ
неверный. 002
*
2Ответ
неверный. 002
*
3Ответ правильный.
005
*
4Ответ
неверный. 002
*
*
101Ответ
правильный. 005
*
2Ответ неверный. 002
*
3Ответ
неверный. 002
*
4Ответ
неверный. 002
*
*
0
УПРАВЛЕНИЕ ЦВЕТОМ И СТИЛЕМ
ИЗОБРАЖЕНИЙ
В данном разделе мы
рассмотрим возможности управления цветовой
палитрой и стилем рисования.
* procedure
GetPalette(var PaletteType);
Возвращает текущую
плитру и количество цветов в ней. Применя-
ется только в графическом
режиме и только с драйверами EGA, EGA 64
и VGA.
* procedure
SetAllPalette(var Palette);
Меняет все цвета
палитры на заданные. Переменная без типа
Palette в первом байте
содержит число N- количество цветов в палитре
а в последующих N байах -
коды задаваемых цветов. Если задана вели-
чина -1, то исходный цвет
остается без изменений.
* procedure
SetPalette(NumberColor:word;Color:byte);
Изменяет один из
цветов палитры. NumberColor - порядковый
номер изменяемого цвета.
Color -код нового цвета.
* procedure
SetColor(Color:word);
Устанавливает текущий
цвет рисования.Color - код цвета либо
его имя. Возможные значения
параметра приведены на следующем экране
УПРАВЛЕНИЕ
ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
_____________________________________________________________________
Имя Значение
Назначение
--------------------------------------------------------------------
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
желтый
1White 15
белый
УПРАВЛЕНИЕ
ЦВЕТОМ И СТИЛЕМ ИЗОБРАЖЕНИЯ
* procedure
SetBKColor(Color:word);
Устанавливает цвет фона
рисования. Color - код или имя цвета.
Для получения справок о
кодах цветов, связанных с курсором и
фоном рисования,
используются функции:
function GetColor:word;
function GetBKColor:word;
Факторами,
определяющими стиль рисования, являются толщина и
способ выражения линий,
используемых в изображениях контурных линий
и линий закраски замкнутых
фрагментов рисунков.
* procedure
SetLineStyle(LineStyle:word; Pattern:word;
*
Thiekness:word);
Устанавливает стиль
контурных линий и их толщину. Параметр
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
|