//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