Friday, December 4, 2009

DDA and BRESENHAM'S line drawing

#include
#include
#include
#include
# define round(a)((int)(a+0.5))
void ddaline(int,int,int,int,int);
void bresenham(int,int,int,int,int);

void main()
{ int gd,gm;
detectgraph(&gd,&gm);
int x[10],y[10],n,i;
initgraph(&gd,&gm,"..\\bgi");
printf("\n enter the no of sides of polygon\n");
scanf("%d",&n);
printf("\n enter the end points of polygon\n");
for(i=0;i {
scanf("%d",&x[i]);
scanf("%d",&y[i]);
}
x[i]=x[0];y[i]=y[0];
for(i=0;i {
ddaline(x[i],y[i],x[i+1],y[i+1],i);
}
getch();

/* printf("\n enter the 2 end points x1,y1,x2,y2\n");
scanf("%d",&x1);
scanf("%d",&y1);
scanf("%d",&x2);
scanf("%d",&y2);
bresenham(x1,y1,x2,y2,3);*/
getch();

}
void ddaline(int x1,int y1,int x2,int y2,int col)
{ int steps,dx,dy,i;float xinc,yinc,x,y;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
xinc=(float)dx/steps;
yinc=(float)dy/steps;
x=x1;y=y1;
putpixel(x,y,col);
for(i=0;i {
x=x+xinc;
y=y+yinc;
putpixel(round(x),round(y),col);
}
}

void bresenham(int x1,int y1,int x2,int y2,int col)
{ int dx,dy,p,xend,b,s;float x,y;
dx=abs(x2-x1);
dy=abs(y2-y1);
if(x1>x2)
{ x=x2;y=y2;xend=x1;}
else
{x=x1;y=y1;xend=x2;}
p=2*(dy)-dx;
while(x { putpixel(round(x),round(y),col);

if(p<0)
{ p=p+2*dy;
}
else
{ y++;
p=p+2*(dy-dx);
}
x++;
}
if(x1==x2)
{ if(y1>y2)
{b=y1;s=y2;}
else
{b=y2;s=y1;}
while(s { putpixel(round(x1),round(s),col);
s++;
}
}
}



No comments:

Post a Comment