Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
При написании программ для задач из данного раздела не забывайте включить в программу заголовочный файл graphics.h и правильно вызвать функцию initgraph для инициализации графического режима.
В графическом режиме все изображения на экране создаются светящимися точками пикселями. Разрешающая способность, то есть количество пикселей по горизонтали и по вертикали, зависит от типа монитора и типа электронной схемы (видеоадаптера), обеспечивающей работу монитора.
В состав TC входит библиотека функций для реализации точечной графики, прототипы которых находятся в файле graphics.h.
Для поддержки графического режима работы экрана в оперативную память должна быть загружена специальная программа графический драйвер. В TC имеются шесть файлов с графическими драйверами: CGA.BGI, EGAVGA.BGI, IBM8514.BGI, HERC.BGI, ATT.BGI, PC3270.BGI. Заметим, что расширение BGI произошло от слов Borland Graphic Interface. Каждый файл содержит драйвер для одного или нескольких близких по типу видеоадаптеров. Логически TC различает десять графических драйверов. Для каждого драйвера в файле graphics.h определена константа, которую можно считать символическим именем драйвера. Константы графических драйверов, их значения и соответствующие имена файлов перечислены в табл..
Таблица . Графические драйверы Turbo C++
Константа (символическое имя драйвера) |
Значение константы |
Имя файла драйвера |
CGA MCGA EGA EGA64 EGAMONO IBM8514 HERCMONO ATT400 VGA PC3270 DETECT |
1 2 3 4 5 6 7 8 9 10 0 |
CGA.BGI CGA.BGI EGAVGA.BGI EGAVGA.BGI EGAVGA.BGI IBM8514.BGI HERC.BGI ATT.BGI EGAVGA.BGI PC3270.BGI |
Константа DETECT используется, когда системе самой поручается определить тип видеоадаптера и загрузить соответствующий драйвер. При этом будет использован драйвер, обеспечивающий максимальное разрешение
Графические драйверы обеспечивают один или несколько различных графических режимов, для которых в файле graphics.h определены константы. В табл. приведены имена и значения этих констант для драйвера VGA, разрешение и количество цветов.
Таблица . Константы графических режимов
Графический драйвер |
Константа графического режима |
Значение константы |
Разрешение, пикселей |
Количество цветов |
VGA |
VGALO VGAMED VGAHI |
0 1 2 |
640 x 200 640 x 350 640 x 480 |
16 16 16 |
Для перевода адаптера экрана в графический режим и загрузки соответствующего драйвера служит библиотечная функция initgraph. Ее прототип имеет вид
void initgraph(int* GraphDriver, int* GraphMode, char* PathToDriver);
Графический драйвер ищется в каталоге, имя которого указано в аргументе PathToDriver. Если в указанном каталоге драйвер не найден, то просматривается текущий каталог. Если в качестве третьего аргумента указана пустая строка "", то просматривается только текущий каталог. GraphDriver указывает номер драйвера, GraphMode указывает номер графического режима, который должен быть установлен.
Если положить GraphDriver = 0 или библиотечной константе DETECT, то производится автоматическое распознавание графического адаптера, в память загружается соответствующий драйвер, устанавливается режим с максимальным разрешением, а переменным, указанным в аргументах GraphDriver и GraphMode, присваиваются значения, равные номеру драйвера и номера режима.
Об успехе или неудаче той или иной графической операции можно судить по значению, вырабатываемому функцией
int graphresult(d);
после каждой графической операции. Результат, равный 0 (значение библиотечной константы grOk), означает удачное, а отрицательное значение неудачное выполнение операции.
Для восстановления текстового режима служит функция
void closegraph():
Эта функция освобождает память, выделенную графическому драйверу и выбранному виду шрифта, использовавшегося в графическом режиме.
В графическом режиме каждый пиксель имеет две координаты по горизонтали и по вертикали экрана. Начало координат находится в левом верхнем углу экрана. Нумерация пикселей начинается с нуля. Направление отсчета: по горизонтали слева направо, по вертикали сверху вниз.
Для рисования на экране имеется довольно много библиотечных функций. Рассмотрим некоторые.
int getcolor(void);
возвращает текущий цвет рисования. Всего для рисования доступно 16 цветов, они кодируются такими же константами, как в текстовом режиме, табл..
void setcolor(int color);
устанавливает новый цвет рисования color.
int getbkcolor(void);
возвращает текущий цвет фона.
void setbkcolor(int color);
устанавливает новый цвет фона color.
void putpixel(int x, int y, int color);
изображает на экране точку с координатами x, y цветом color.
void line(int x1, int y1, int x2, int y2,);
рисует на экране отрезок прямой, соединяющий точки с координатами (x1, y1) и (x2, y2), используя текущий цвет, текущие стиль и толщину линий. По умолчанию текущим является белый цвет, текущим стилем сплошная линия, а текущей толщиной толщина в один пиксель.
void circle (int x, int y, int Radius);
изображает на экране окружность радиуса Radius с центром, имеющим координаты x, y.
int getmaxx(void); int getmaxy(void);
возвращают максимальные координаты точек на экране соответственно в горизонтальном и вертикальном направлениях.
Обратите внимание на строку "C:\\TC30\\BGI", задающую путь к папке, в которой находятся файлы графических драйверов. Принято имена вложенных папок отделять обратной наклонной чертой, чтобы ее изобразить в программе на языке C++, она удваивается.
В программе использована константа M_PI, определенная в файле math.h имеющая значение числа π.
Координаты вершин звезды хранятся в массивах x и y из N элементов. Для изображения звезды, например, при N=7 и m=3 нужно провести 7 отрезков, соединяющих следующие вершины: 0 и 3, 1 и 4, 2 и 5, 3 и 6, 4 и 0, 5 и 1, 6 и 2. Отрезки рисуются в цикле с помощью функции line. Номера начальных точек i возрастают от 0 до N-1, а номера конечных точек находятся с помощью выражения (i + m) % N, где % оператор нахождения остатка от деления. В правильности данного выражения легко убедиться подстановкой.
На экране мы увидим следующее: