Задание на выполнение работы
1) Записать и опробовать программу «Калькулятор». 2)Записать программы для примеров 1-5 из введения, откомпилировать их и опробовать для разных параметров и представления данных. 3) Записать программу «стрелка», произвести отладку программы и запустить в работу. 4) Построить график функции. Задается преподавателем.
Содержание отчета:
1) Полные программы для рисования построенных объектов. 2) Результаты построений.
Контрольные вопросы
1) Назовите основные “рисующие функции” 2) Перечислите аргументы функций Arc() ,Pie(). 3) Назовите основные функции вывода текстовой информации в графическом режиме. Лабораторная работа № 3 Растровая графика двухмерных графических объектов
Цель работы: научиться работать с графическими функциями для рисования дуг, окружностей, эллипсов и других графических примитивов.
Содержание работы
Для режима рисования необходимо установить на компьютере графический режим работы. Он устанавливается графической функцией initgraph(), полный текст которой следующий: { void initgraph (void) int driver, mode, errorcode, Xmax, Ymax ; register int i; driver = DETECT; initgraph (&driver, &mode, “ “); Xmax = getmaxx( ); Ymax = getmaxy(); errorcode = graphresult(); if (errorcode!=grOk) /*если произошла ошибка*/ { printf (“Ошибка:% s\n” grapherrormsg (errorcode)); printf (“Для останова нажмите любую клавишу \n”); getch(); exit (1); /*Завершение работы*/ } Для облегчения работы (чтобы каждый раз не записывать эти строки) создайте специальный заголовочный файл zaggraf.c, содержащий указанный текст, и поместите его в директорию INCLUDE. Для входа в графический режим необходимо: 1) В заголовок программы поместить строку: # include<zaggraf.c> 2) Вместо записи intgraph() - указать zaggraf(); Функции Турбо Си позволяют эффективно рисовать окружности, дуги, секторы, эллипсы. Прототипы этих функций записываются следующим образом: void far circle (int x, int y, int radius); void far arc (int x, int y, int stangle, int endangle, int xradius, int yradius); void far getarccoords(srtuct arccoordstype far * arccoords); Структура arccoordstype записана в файле GRAPHICS.H как: sruct arccoordstype { int x, y; int xstart, ystart, xend, yend; } Тип графического видеоадаптера определяет количество цветов, и какие цвета могут быть использованы в графическом режиме. Наибольшая разница существует между адаптерами EGA и CGA. Видеоадаптер имеет четыре цвета в палитре и четыре палитры. Это значит, что на экране одновременно могут быть четыре цвета. Цвета нумеруются от 0 до 3. Палитры также нумеруются от 0 до 3. Цвет номер 0 всегда совпадает с цветом фона. Драйвер VGA c цветами работает также как и драйвер СGA, только имеет более высокое разрешение. Установка цвета фона производится функцией void far setbkcolor(int color); а изменение палитры_функцией void far setpalette( int index,int color); причем эта функция не применима для видеоадаптера CGA за исключением цвета фона, который всегда имеет index, равный нулю. Функция circle() рисует на экране окружность с центром в точке с координатами (x,y) и радиусом radius (единица измерения-пиксель) текущим цветом. По умолчанию цвет устанавливается WHITE. Изменить цвет линии можно функцией setcolor() с прототипом void far setcolor(int color); К другим рисующим функциям относятся: arc()- рисует дугу окружности, drawpoly()-рисует контур многоугольника, elipse()-рисует эллипс, rectangle-рисует прямоугольник. Прототипы рисующих функций приведены в разделе 1. Для закрашивания (заполнения) замкнутого контура служит функция floodfill(), которая закрашивает область заданным цветом по заданному шаблону. Ее прототип void far floodfill(int x,int y,bordercolor); где x, y- координаты точки внутри контура заполнения, bordercolor-цвет контура. Цвет и шаблон заполнения устанавливается функцией void far setfillstyle(int pattern, int color); Вид шаблона закрашивания и соответствующие ему МАКРОС и значение (pattern) приведены в табл.2. Обратите внимание, что все макросы записываются с прописной буквы с подчеркиванием. Примеры использования рисующих функций.
Пример 1 /*Рисование квадрата в центре экрана*/ ..................................................................................... main() { --------------------- left=getmaxx()/2-50; /* задается верхний*/ top=getmaxy()/2-50; /*левый угол */ right=getmaxx()/2+50; /* задается нижний */ bottom=getmaxy()/2+50; /*правый угол*/ /*Рисование квадрата*/ rectangle(left,top,right,bottom); getch(); }
Пример 2 /*Программа рисует круг в левом верхнем углу, который перемещается по диагонали вниз*/ main() { int ym=480 xm=640, r=50; dx=((xm-2*r)/150); dy=((ym-2*r)/150); x=r; y=r; initgraph (void); setviewport(1,1,640,480,0); / * задание окна вывода*/ setbkcolor(BLACK); /*задание цвета фона */ setcolor(WHITE); /* задание цвета примитива*/ clearviewport(); /* очистка окна вывода */ setwritemode(1); /* задание типа печати */ circle(r,r,r); /* рисование окружности */ getch(); /* ждать нажатия клавиши */ /* перемещение окружности по диагонали */ while((y<ym-r)&&(x<xm-r) { setcolor(WHITE); circle(x,y,r); setcolor(BLACK); circle(x,y,r); x=dx+x; y=dy+y; } circle(xm-r,ym-r,r); getch(); return 0; } ©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|