Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
13
Добавлен:
17.04.2013
Размер:
8.46 Кб
Скачать
#include<graphics.h>
#include <math.h>

struct all
	   {
	   int name;
	   int x11;
	   int y11;
	   int x22;
	   int y22;
	   int rad;
	   int col;
	   int f_col;
				  };

all ptr[1000];
int nom=0,cons;

void in_mas(int nam,int mx,int my,int mx2,int my2,int rr,int mcol,int fcol)
{
  ptr[nom].name=nam;       //1-в®зЄ  2-«Ё­Ёп 3-Їаאַ㣮«. 4-ЄагЈ 0-Їгбв®
  ptr[nom].x11=mx;         //Є®®а¤-вл ўҐае­ҐЈ® гЈ«  Їап¬-Є  Ё«Ё 業ва ЄагЈ 
  ptr[nom].y11=my;         //Ё«Ё Є®®а-вл в®зЄЁ
  ptr[nom].x22=mx2;        //Є®®а¤-вл ­Ё¦­ҐЈ® гЈ«  Їап¬-Є  Ё«Ё ўв®а®© в®зЄЁ
  ptr[nom].y22=my2;        // «Ё­ЁЁ (¤«п в®зЄЁ Ё ЄагЈ  ­г«Ё)
  ptr[nom].rad=rr;         //а ¤Ёгб ЄагЈ 
  ptr[nom].col=mcol;       //梥⠣࠭Ёжл Ё«Ё § Єа бЄЁ
  ptr[nom].f_col=fcol;     //§ Єа иҐ­ Ё«Ё ­Ґв
	   nom++;
	   }

void in_mas2(int as,int nam,int mx,int my,int mx2,int my2,int rr,int mcol,int fcol)
{
  ptr[as].name=nam;       //1-в®зЄ  2-«Ё­Ёп 3-Їаאַ㣮«. 4-ЄагЈ 0-Їгбв®
  ptr[as].x11=mx;         //Є®®а¤-вл ўҐае­ҐЈ® гЈ«  Їап¬-Є  Ё«Ё 業ва ЄагЈ 
  ptr[as].y11=my;         //Ё«Ё Є®®а-вл в®зЄЁ
  ptr[as].x22=mx2;        //Є®®а¤-вл ­Ё¦­ҐЈ® гЈ«  Їап¬-Є  Ё«Ё ўв®а®© в®зЄЁ
  ptr[as].y22=my2;        // «Ё­ЁЁ (¤«п в®зЄЁ Ё ЄагЈ  ­г«Ё)
  ptr[as].rad=rr;         //а ¤Ёгб ЄагЈ 
  ptr[as].col=mcol;       //梥⠣࠭Ёжл Ё«Ё § Єа бЄЁ
  ptr[as].f_col=fcol;     //§ Єа иҐ­ Ё«Ё ­Ґв
	   }

void out_mas(int ww)
{
  ptr[ww].name=0;
	   }

class Pixel
 {
		public:
		 int	x,y;
		 void drawpix(int cl);
		 void drawpix2(int nx,int ny,int cl);
				};

void Pixel::drawpix(int cl)
{
  mouselimit(101,11,629,459);
	while (mousepressed()!=0)
		{
		x=mousegetx();
		y=mousegety();
		}
 hidemouse();
 putpixel(x,y,cl);
 in_mas(1,x,y,0,0,0,cl,0);
 showmouse();
			 }

void Pixel::drawpix2(int nx,int ny,int cl)
{
 setwritemode(COPY_PUT);
 putpixel(nx,ny,cl);
				   }

class Line:public Pixel
	   {
	  public:
		int x1,y1;
		void drawline(int cl);
		void drawline2(int nx,int ny,int nx1,int ny1,int cl);
		void Mdrawline(int nx,int ny,int nx1,int ny1,int cl);
				  };

void Line::drawline(int cl)
{
 mouselimit(101,11,629,459);
	if (mousepressed()!=0)
	  {
		x=mousegetx();
		y=mousegety();
	while (mousepressed()!=0)
		{
		x1=mousegetx();
		y1=mousegety();
		setwritemode(XOR_PUT);
		setcolor(cl);
		hidemouse();
		line(x,y,x1,y1);
		showmouse();
		delay(30);
		hidemouse();
		line(x,y,x1,y1);
		showmouse();
		}               }
		hidemouse();
		setwritemode(COPY_PUT);
		line(x,y,x1,y1);
 in_mas(2,x,y,x1,y1,0,cl,0);
		showmouse();
				  }

void Line::drawline2(int nx,int ny,int nx1,int ny1,int cl)
{
	setwritemode(COPY_PUT);
	setcolor(cl);
	line(nx,ny,nx1,ny1);
					}

void Line::Mdrawline(int nx,int ny,int nx1,int ny1,int cl)
{
 int xx,yy,dx,dy,l=0;
 initmouse();
 setcolor(cl);
		showmouse();
 mouselimit(101,11,629,459);
	while (mousepressed()==0)
	  {
		xx=mousegetx();
		yy=mousegety();
		dx=xx-nx;
		dy=yy-ny;
		x=nx+dx;
		y=ny+dy;
		x1=nx1+dx;
		y1=ny1+dy;
 if((x>629)||(y>459)||(x1<101)||(y1<11)||(x1>629)||(y1>459)||(x<101)||(y<11))
 {setcolor(13);l=1;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl);continue;}
 else{setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl); }
		setwritemode(XOR_PUT);
		hidemouse();
		line(x,y,x1,y1);
		showmouse();
		delay(40);
		hidemouse();
		line(x,y,x1,y1);
		showmouse();
					   }
		hidemouse();
		setwritemode(COPY_PUT);
		if (l==0){
		line(x,y,x1,y1);
		in_mas2(cons,2,x,y,x1,y1,0,cl,0);}
		else in_mas2(cons,2,nx,ny,nx1,ny1,0,cl,0);
 setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
		showmouse();
				  }

class Rect:public Line
	   {
	  public:
		void drawrect(int cl);
		void drawrect2(int nx,int ny,int nx1,int ny1,int cl,int zor);
		void Mdrawrect(int nx,int ny,int nx1,int ny1,int cl,int zor);
				  };

void Rect::drawrect(int cl)
{
mouselimit(101,11,629,459);
  if(mousepressed()!=0)
	  {
		x=mousegetx();
		y=mousegety();
	while(mousepressed()!=0)
		{
		x1=mousegetx();
		y1=mousegety();
		setwritemode(XOR_PUT);
		setcolor(cl);
		hidemouse();
		rectangle(x,y,x1,y1);
		showmouse();
		delay(30);
		hidemouse();
		rectangle(x,y,x1,y1);
		showmouse();
		}                }
		hidemouse();
		setwritemode(COPY_PUT);
		rectangle(x,y,x1,y1);
		showmouse();
 in_mas(3,x,y,x1,y1,0,cl,0);
				  }

void Rect::drawrect2(int nx,int ny,int nx1,int ny1,int cl,int zor)
{
	setwritemode(COPY_PUT);
	if(zor==1)
	{setfillstyle(SOLID_FILL,cl);
	bar(nx,ny,nx1,ny1);}
	else {setcolor(cl);rectangle(nx,ny,nx1,ny1);}
						}

void Rect::Mdrawrect(int nx,int ny,int nx1,int ny1,int cl,int zor)
{
 int xx,yy,dx,dy,l=0;
 initmouse();
 setcolor(cl);
		showmouse();
 mouselimit(101,11,629,459);
	while (mousepressed()==0)
	  {
		xx=mousegetx();
		yy=mousegety();
		dx=xx-nx;
		dy=yy-ny;
		x=nx+dx;
		y=ny+dy;
		x1=nx1+dx;
		y1=ny1+dy;
 if((x>629)||(y>459)||(x1<101)||(y1<11)||(x1>629)||(y1>459)||(x<101)||(y<11))
 {setcolor(13);l=1;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl);continue;}
 else{setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl); }
		setwritemode(XOR_PUT);
		hidemouse();
		rectangle(x,y,x1,y1);
		showmouse();
		delay(30);
		hidemouse();
		rectangle(x,y,x1,y1);
		showmouse();
		}
		hidemouse();
		setwritemode(COPY_PUT);
		if(l==0){
		rectangle(x,y,x1,y1);
		in_mas2(cons,3,x,y,x1,y1,0,cl,zor);}
		else in_mas2(cons,3,nx,ny,nx1,ny1,0,cl,zor);
		showmouse();
				  }

class Circle:public Rect
	   {
	  public:
		void drawcirc(int cl);
		void drawcirc2(int nx,int ny,int rd,int cl,int zor);
		void Mdrawcirc(int nx,int ny,int rd,int cl,int zor);
				  };

void c_hlp(int x1,int y1,int r)
{
	double rr=(double)r;
	for(int i=0; i<(int)rr; i++)
	{
	  int x,xx,x2,xx2;
	  x=x1+(int)rr-i;
	  xx=(int)rr-i;
	  x2=x1-(int)rr+i;
	  long double a1=(rr*rr-(double)xx*(double)xx);
	  int yy1=y1+sqrt(a1);
	  int yy2=y1-sqrt(a1);
	  setwritemode(XOR_PUT);
	  hidemouse();
	  line(x,yy1,x,yy1);
	  line(x,yy2,x,yy2);
	  line(x2,yy1,x2,yy1);
	  line(x2,yy2,x2,yy2);
	  showmouse();
	}
}

void Circle::drawcirc(int cl)
{
	int x1,y1,rr,rr1,rr2,l=0;
 mouselimit(101,11,629,459);
 setcolor(cl);
 if (mousepressed()!=0)
	  {
		x=mousegetx();
		y=mousegety();
	while (mousepressed()!=0)
		{
		x1=mousegetx();
		y1=mousegety();
		rr1=abs(x-x1);
		rr2=abs(y-y1);
		if (rr1>rr2) rr=rr1; else rr=rr2;
  if ( (rr>abs(100-x)) || (rr>abs(630-x)) || (rr>abs(10-y)) || (rr>abs(460-y)))
 {setcolor(13);outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl); l=1;continue;}
 else{setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl); }
  c_hlp(x,y,rr);
  c_hlp(x,y,rr);
		  }
  setwritemode(COPY_PUT);
	  hidemouse();
  if (l==0){
  ellipse(x,y,0,360,rr,rr);
  in_mas(4,x,y,0,0,rr,cl,0);}
  setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
	  showmouse();
	  }
		 }

void Circle::drawcirc2(int nx,int ny,int rd,int cl,int zor)
{
	setwritemode(COPY_PUT);
	if(zor==1)
	{
	setfillstyle(SOLID_FILL,cl);
	setcolor(cl);
	fillellipse(nx,ny,rd,rd);
	}
	else {
	setcolor(cl);
	ellipse(nx,ny,0,360,rd,rd);}
						}

void Circle::Mdrawcirc(int nx,int ny,int rd,int cl,int zor)
{
 int xx,yy,dx,dy,rr1,rr2,rr,l=0;
 initmouse();
 setcolor(cl);
 showmouse();
 mouselimit(101,11,629,459);
	while (mousepressed()==0)
	  {
		xx=mousegetx();
		yy=mousegety();
		dx=xx-nx;
		dy=yy-ny;
		x=nx+dx;
		y=ny+dy;
  if ( (rd>abs(100-x)) || (rd>abs(630-x)) || (rd>abs(10-y)) || (rd>abs(460-y)))
 {setcolor(13);l=1;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl);continue;}
 else{setcolor(0);l=0;outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
  setcolor(cl); }
		setwritemode(XOR_PUT);
		hidemouse();
		c_hlp(x,y,rd);
		showmouse();
		delay(30);
		hidemouse();
		c_hlp(x,y,rd);
		showmouse();
		}
		hidemouse();
		setwritemode(COPY_PUT);
		if(l==0){
		ellipse(x,y,0,360,rd,rd);
		in_mas2(cons,4,x,y,0,0,rd,cl,zor);}
		else in_mas2(cons,4,nx,ny,0,0,rd,cl,zor);
  setcolor(0);outtextxy(100,465,"®ЎкҐЄв ўл襫 §  Ја ­Ёжг Ї®«п аЁб®ў ­Ёп");
		showmouse();
				  }


Соседние файлы в папке GRAPH_RD