Разработка функций, рисующих на экране незакрашенную или закрашенную фигуру и две вложенных одну в другую фигуры, внешняя из которых закрашена (Лабораторная работа № 1)

Страницы работы

Содержание работы

I.Постановка задачи.

Разработать функции, рисующие на экране следующие геометрические фигуры:

– незакрашенную фигуру,

– закрашенную фигуру,

– две вложенных одну в другую фигуры, внешняя фигура закрашена за исключением пространства внутренней фигуры.

Разработать программу, демонстрирующую выполнение указанных функций, обеспечить ввод пользователем параметров фигур (координат и др.), параметров рисуемых линий и закраски. Включить в программу проверки нахождения фигуры в пределах экрана и вложенности двух фигур. Результаты работы программы должны сопровождаться выводом поясняющего сообщения в графическом режиме.

II.Алгоритм.

            В программе фигура  рисуется функцией circle(x,y,радиус).

Проверка введенных данных осуществляется функцией check_up(x,y,R,maxx,maxy), где R-радиус заданной окружности, maxx и maxy максимальные координаты приобретаемые на экране. Проверка осуществляется следующим образом: если x<0 или y<0 или x>maxx или y>maxy то результат работы функции – ложь(0),

                                                                 Иначе если x-R<0 или y-R<0 или x+R>maxx или y+R>maxy, то результат работы программы – ложь(0), иначе результат работы – истина(1).

            Проверка вложенности производиться функцией  check_up_in_put(x, x2, y, y2, R, R2), где x2, y2 – координаты внутренней(меньшей) окружности, а R –её радиус.

Проверка идет следующим образом: если x2<x-R или y2<y-R или x2>x+R или y2>y+R то функция возвращает 0;

                                                               иначе если x2-R2<x-R или y2-R2<y-R или x2+R2>x+R или y2+R2>y+R функция возвращает 0;

     иначе она возвращает 1;

III.Текст программы.

#include<graphics.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

int x,x2,y,y2,R,R2;

void vvod(int*x,int*y,int*R)

{printf("Enter coordinates and radius.");

 scanf("%d%d%d",x,y,R);}

/*-------------------------------------------------------------*/

int check_up(int x,int y,int R,int maxx,int maxy)

{

if(x<0||y<0||x>maxx||y>maxy)return 0;

 else if(((x-R)<0 || (y-R)<0) || ((x+R)>maxx || (y+R))>maxy)return 0;

      else return 1;}

/*-------------------------------------------------------------*/

void colorgraph(int *color)

{printf("\nChoose the color of figure:\n1-Blue\n4-Red\n2-Green\n\n");

            scanf("%d",color);}

/****************************************************************/

void othergraph(int*background,int*width)

 {printf("\nChoose the background:\n3-Gray\n15-White\n0-Black\n\n");

            scanf("%d",background);

 printf("\nChoose the width:\n1-Normal\n3-Thick\n\n");

            scanf("%d",width);}

/*-------------------------------------------------------------*/

void flooding(int x,int y,int R)

{int color;

 circle(x,y,R);

 floodfill(x,y,color);}

/*-------------------------------------------------------------*/

void input_flooding(int x2,int y2,int x,int y,int R,int R2,int color)

{int color2;

 circle(x,y,R);

 floodfill(x,y,color);

 color2=14;

 setcolor(color2);

 circle(x2,y2,R2);

 setbkcolor(0);

 setfillstyle(SOLID_FILL,7);

 floodfill(x2,y2,color2);

 }

/*-------------------------------------------------------------*/

int check_up_in_put(int x,int x2,int y,int y2,int R,int R2)

{if((x2<(x-R) || y2<(y-R)) || (x2>(x+R) || y2>(y+R))) return 0;

 else if(((x2-R2)<(x-R) || (y2-R2)<(y-R)) || ((x2+R2)>(x+R) || (y2+R2)>(y+R))) return 0;

       else return 1;}

/*-------------------------------------------------------------*/

void main()

{       clrscr(); /*ochistka ekrana*/

            int gd, gm, error;

            int maxx, maxy;

            int color,color2;

            int background;

            int width;

            int ch,i,k;

            detectgraph(&gd, &gm);

            initgraph(&gd, &gm, "Y:\\bc\\BGI");

            error=graphresult();

//-----------------proverka na oshibki-----------//

            if(error!=grOk)

             {

             puts("oshibka grafiki");

             puts(grapherrormsg(error));

             exit(1);

             }

//-----------------------------------------------//

            maxx=getmaxx();

            maxy=getmaxy();

Похожие материалы

Информация о работе