ad

Thursday, 5 July 2012

program to draw shapes using drawing algorithms

//program to draw shapes using drawing algorithms

#include< stdio.h >

#include< conio.h >

#include< graphics.h >

#include< ctype.h >

#include< math.h >

#include< stdlib.h >

void draw(int x1,int y1,int x2,int y2);

void draw_circle(int xc,int yc,int rad);

void symmetry(int x,int y,int xc,int yc);

void putelpix(float xc,float yc,float x,float y);

void mdpt(float xc,float yc,float rx,float ry);

void main()

{

int x1,y1,x2,y2;

int gd=DETECT,gm;

initgraph(&gd,&gm,"C:\\TC\\BGI");

//draw triangle

draw(300,80,200,300);

draw(400,300,200,300);

draw(300,80,400,300);

//draw rectangle

draw(310,400,290,400);

draw(310,400,310,300);

draw(290,400,290,300);

draw(290,290,290,270);

//draw square

draw(290,290,290,270);

draw(310,290,310,270);

draw(290,290,310,290);

draw(290,270,310,270);

//draw star

draw(280,190,310,150);

draw(300,210,310,150);

draw(300,210,280,150);

draw(320,190,280,150);

draw(320,190,280,190);

//draw circles

draw_circle(270,220,10);

draw_circle(330,220,10);

//draw ellipse

mdpt(250,270,20,15);

mdpt(350,270,20,15);

getch();

}

//function for line

void draw(int x1,int y1,int x2,int y2)

{

float x,y,xinc,yinc,dx,dy;

int k;

int step;

dx=x2-x1;

dy=y2-y1;

if(abs(dx)>abs(dy))

step=abs(dx);

else

step=abs(dy);

xinc=dx/step;

yinc=dy/step;

x=x1;

y=y1;

putpixel(x,y,1);

for(k=1;k<=step;k++)

{

x=x+xinc;

y=y+yinc;

putpixel(x,y,2);

}

}

//functions for circle

void draw_circle(int xc,int yc,int rad)

{

int x = 0;

int y = rad;

int p = 1-rad;

symmetry(x,y,xc,yc);

for(x= 0;y>x;x++)

{

if(p<0)

p += 2*x + 3;

else

{

p += 2*(x-y) + 5;

y--;

}

symmetry(x,y,xc,yc);

}

}

void symmetry(int x,int y,int xc,int yc)

{

putpixel(xc+x,yc-y,EGA_GREEN);//For pixel (x,y)

putpixel(xc+y,yc-x,EGA_GREEN);//For pixel (y,x)

putpixel(xc+y,yc+x,EGA_GREEN);//For pixel (y,-x)

putpixel(xc+x,yc+y,EGA_GREEN);//For pixel (x,-y)

putpixel(xc-x,yc+y,EGA_GREEN);//For pixel (-x,-y)

putpixel(xc-y,yc+x,EGA_GREEN);//For pixel (-y,-x)

putpixel(xc-y,yc-x,EGA_GREEN);//For pixel (-y,x)

putpixel(xc-x,yc-y,EGA_GREEN);//For pixel (-x,y)

}

//function for ellipse

void putelpix(float xc,float yc,float x,float y)

{

putpixel((int)(xc+x),(int)(yc+y),50);

putpixel((int)(xc-x),(int)(yc-y),50);

putpixel((int)(xc+x),(int)(yc-y),50);

putpixel((int)(xc-x),(int)(yc+y),50);

}

void mdpt(float xc,float yc,float rx,float ry)

{

float x=0,y=ry,p1,p2,t1,t2;

int k;

p1=ry*ry-rx*rx*ry+0.25*rx*rx;

putelpix(xc,yc,x,y);

for(k=0;(2*ry*ry*x)<=(2*rx*rx*y);k++)

{

t1=2*ry*ry*x+2*ry*ry;

t2=2*rx*rx*y-2*rx*rx;

if(p1<0)

p1=p1+t1+ry*ry;

else

{

p1=p1+t1-t2+ry*ry;

y--;

}

x++;

putelpix(xc,yc,x,y);

}

p2=ry*ry*(x+.5)*(x+.5)+rx*rx*(y-1)*(y-1)-rx*rx*ry*ry;

putelpix(xc,yc,x,y);

for(k=0;y>=0;k++)

{

t1=2*ry*ry*x+2*ry*ry;

t2=2*rx*rx*y-2*rx*rx;

if(p2>0)

p2=p2-t2+rx*rx;

else

{

p2=p2+t1-t2+rx*rx;

x++;

}

y--;

putelpix(xc,yc,x,y);

}

}

No comments:

Post a Comment