Digital Differential Analyzer(D.D.A.) Algorithm Void Line_DDA(int x1, int y1, int x2, int y2) { int dx = x2-x1; int dy = y2-y1; int step,k; float x_inc,y_inc,x,y; x=x1; y=y1; if(abs(dx)>abs(dy)) step=abs(dx); else step=abs(dy); x_inc=dx/(float)step; y_inc=dy/(float)step; setpixel(ROUND(x),ROUND(y)); for(k=0;k
Digital Differential Analyzer(D.D.A.) C-Implementation #include #include #include #include void line_DDA(int,int,int,int); int ROUND(float); void main() { int x1,x2,y1,y2; int gd=DETECT,gm; clrscr(); printf("\n Enter the end coordinates of the line : "); printf("\n x1,y1 : "); scanf("%d%d",&x1,&y1); printf("\n x2,y2 : "); scanf("%d%d",&x2,&y2); initgraph(&gd,&gm,"C:\\TC\\BGI"); line_DDA(x1,y1,x2,y2); getch(); } void line_DDA(int x1,int y1,int x2,int y2) { int dx = x2-x1; int dy = y2-y1; int step,k; float x_inc,y_inc,x,y; x=x1; y=y1; if(abs(dx)>abs(dy)) { step=abs(dx); } else { step=abs(dy); }
x_inc=dx/(float)step; y_inc=dy/(float)step; putpixel(ROUND(x),ROUND(y),6); for(k=0;k((int)x+0.5)) { y=floor(x); } if(x<((int)x+0.5)) { y=ceil(x); } return(y); }
Bresenhams Algorithm void Line_Bres(x1 , y1 , x2 , y2) { Int dx,dy,x,y,x_end,p; dx=abs(x1-x2); dy=abs(y1-y2); p=2*dy-dx; if(x1 > x2) { x=x1; y=y1; x_end=x1; } else { x=x1; y=y1; x_end=x2; } setpixel(x,y,1); while(x < x_end) { x=x+1; if(p<0) p=p+2*dy; else { y=y+1; p=p+2*(dy-dx); } setpixel(x,y,1); } }
Bresenhams C-Implementation #include #include #include #include void line_bres(int,int,int,int); void main() { int x1,x2,y1,y2; int gd=DETECT,gm; clrscr(); printf("\n Enter the end coordinates of the line : "); printf("\n x1,y1 : "); scanf("%d%d",&x1,&y1); printf("\n x2,y2 : "); scanf("%d%d",&x2,&y2); initgraph(&gd,&gm,"C:\\TC\\BGI"); line_bres(x1,y1,x2,y2); getch(); } void line_bres(int x1,int y1,int x2,int y2) { int dx,dy,x,y,x_end,p; dx=abs(x1-x2); dy=abs(y1-y2); p=2*dy-dx; if(x1>x2) { x=x2; y=y2; x_end=x1; }
else { x=x1; y=y1; x_end=x2; } putpixel(x,y,1); while(x
MID-POINT CIRCLE ALGORITHM CIRCLE_MID_POINT(int x_c,int y_c,int r) { int x, y, p; p = 1- r; x = 0; y = r; PLOT_POINT(x_c,y_c,x,y); while(x < y) { if(p < 0) { x = x + 1; p = p + 2 * x + 1; } else { x = x+1; y = y-1; p=p+2*(x-y)+1; } PLOT_POINT(x_c,y_c,x,y); } } PLOT_POINT(int { putpixel( putpixel( putpixel( putpixel( putpixel( putpixel( putpixel( putpixel( }
x_c, int y_c, int x, int y) (x_c (x_c (x_c (x_c (x_c (x_c (x_c (x_c
+ + + + -
x), x), x), x), y), y), y), y),
(y_c (y_c (y_c (y_c (y_c (y_c (y_c (y_c
+ + + + -
y),5); y),5); y),5); y),5); x),5); x),5); x),5); x),5);
MID-POINT CIRCLE ALGORITHM C-IMPLEMENTATION #include #include #include void plot_point(int,int,int,int); void circle_mid_point(int,int,int); void main() { int x_c,y_c,r; int gd=DETECT,gm; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n Enter the coordinates of center of the circle : "); scanf("%d%d",&x_c,&y_c); printf("\n Enter the radius of circle : "); scanf("%d",&r); circle_mid_point(x_c,y_c,r); getch(); } void circle_mid_point(int x_c,int y_c,int r) { int x,y,p; p=1-r; x=0; y=r; while(x
void plot_point(int x_c,int y_c,int x,int y) { putpixel((x_c+x),(y_c+y),5); putpixel((x_c-x),(y_c+y),5); putpixel((x_c+x),(y_c-y),5); putpixel((x_c-x),(y_c-y),5); putpixel((x_c+y),(y_c+x),5); putpixel((x_c-y),(y_c+x),5); putpixel((x_c+y),(y_c-x),5); putpixel((x_c-y),(y_c-x),5); }
BRESENHAM CIRCLE ALGORITHM CIRCLE_BRES(int x, int y, int r) { float x1, y1, p; x1 = 0; y1 = r; p = 3 – r * r; while(x1 <= y1) { x1 = x1 + 0.01; if(p < 0) { p = p + (4 * x1) + 6; } else { y1 = y1 – 0.01; p = p + (4 * (x1 – y1)) + 10; } putpixel((x_c + x1), (y_c + y1), 10); putpixel((x_c - x1), (y_c - y1), 10); putpixel((x_c + x1), (y_c - y1), 10); putpixel((x_c - x1), (y_c + y1), 10); putpixel((x_c + y1), (y_c + x1), 10); putpixel((x_c - y1), (y_c - x1), 10); putpixel((x_c + y1), (y_c - x1), 10); putpixel((x_c - y1), (y_c + x1), 10); } }
BRESENHAM CIRCLE ALGORITHM’S C-IMPLEMENTATION #include #include #include void circle_bres(int,int,int); void main() { int x_c,y_c,r; int gd=DETECT,gm; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n Enter the coordinates of center of the circle : "); scanf("%d%d",&x_c,&y_c); printf("\n Enter the radius of circle : "); scanf("%d",&r); circle_bres(x_c,y_c,r); getch(); } void circle_bres(int x_c,int y_c,int r) { float x1,y1,p; x1=0; y1=r; p=3-r*r; while(x1 <= y1) { x1=x1+0.01; if(p<0) p=p+(4*x1)+6; else { y1=y1-0.01; p=p+(4*(x1-y1))+10; } putpixel((x_c+x1),(y_c+y1),4); putpixel((x_c-x1),(y_c-y1),4); putpixel((x_c+x1),(y_c-y1),4); putpixel((x_c-x1),(y_c+y1),4); putpixel((x_c+y1),(y_c+x1),4); putpixel((x_c-y1),(y_c-x1),4); putpixel((x_c+y1),(y_c-x1),4); putpixel((x_c-y1),(y_c+x1),4); } }
POLYGON GENERATING ALGORITHM POLYGON_ABS-2(Ax,Ay,N) Entry of polygon in display file. Args: Ax,Ay Array containing the vertices of polygon. Global : DF_PEN_X,DF_PEN_Y Local : I Stepping through polygon sides. BEGIN : IF N<3 THEN RETURN ERROR “Polygon Size Error.” DF_PEN_X Ax[N]; DF_PEN_Y Ay[N]; DISPLAY_FILE_ENTER(N); FOR I=1 to N DO LINE_ABS-2(Ax[I],Ay[I]); RETURN; END;
POLYGON GENERATING ALGORITHM’S C- IMPLEMENTATION
#include #include #include #include #define MAX 20 void polygon(int,int,int,int); int ROUND(float); void main() { int x[MAX],y[MAX],n,i; int gd=DETECT,gm; clrscr(); printf("\n Enter the number of sides of the polygon : "); scanf("%d",&n); if(n<3) printf("\n Please enter valid coordinates...."); else { printf("\n Enter the coordinates of the vertices : "); for(i=0;iabs(dy)) step=abs(dx);
else step=abs(dy); x_inc=dx/(float)step; y_inc=dy/(float)step; putpixel(ROUND(x),ROUND(y),6); for(k=0;k((int)x+0.5)) y=floor(x); if(x<((int)x+0.5)) y=ceil(x); return(y); }
OUTPUT : Enter the number of sides of the polygon : 4 Enter the coordinates of the vertices : x1, y1 : 0 0 x2, y2 : 0 100 x3, y3 : 100 0 x4, y4 : 100 100
POLYGON FILLING ALGORITHM
FILLPOLYGON(x,y,fill,old) Fill the polygon Args: x,y Seed points fill New color to be filled in polygon old Old color/Boundary color Begin: Current getpixel(x,y); if(current==old) Begin: setcolor(fill); putpixel(x,y,fill); fillpolygon(x+1,y,fill,old); fillpolygon(x-1,y,fill,old); fillpolygon(x,y+1,fill,old); fillpolygon(x,y-1,fill,old); End; Return; End;
POLYGON FILLING ALGORITHM’S
C- IMPLEMENTATION #include #include #include void fillpolygon(int,int,int,int); void main() { int gm,gd=DETECT,a,b; int x[30],y[30],i,n; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n\n Enter the number of sides of polygon : "); scanf("%d",&n); printf("\n\n Enter the coordinates : \n"); for(i=1;i<=n;i++) { printf("\n x%d,y%d : ",i,i); scanf("%d %d",&x[i],&y[i]); } cleardevice(); for(i=1;i<=n;i++) { if(i==n) line(x[n],y[n],x[1],y[1]); else line(x[i],y[i],x[i+1],y[i+1]); } printf("\n Enter the seed point coordinate : "); scanf("%d %d",&a,&b); fillpolygon(a,b,4,0); getch(); } void fillpolygon(int x,int y,int fill,int old) { int current=getpixel(x,y); if(current==old) { setcolor(fill); putpixel(x,y,fill); fillpolygon(x+1,y,fill,old); fillpolygon(x-1,y,fill,old); fillpolygon(x,y+1,fill,old); fillpolygon(x,y-1,fill,old); } }
OUTPUT :
Enter the number of sides of the polygon : 4
Enter the coordinates of the vertices : x1, y1 : 0 0 x2, y2 : 0 100 x3, y3 : 100 0 x4, y4 : 100 100 Enter the seed point coordinate : 50 50
SCALING ALGORITHM SCALING(Ax,Ay,dx,dy,N) Resize the line or polygon Args: Ax,Ay Array containing the vertices of
line or polygon. dx,dy Scaling factors. Global : DF_PEN_X,DF_PEN_Y Local : I Stepping through polygon sides. BEGIN : IF N<2 THEN RETURN ERROR “Scaling Size Error.” DF_PEN_X Ax[N]; DF_PEN_Y Ay[N]; DISPLAY_FILE_ENTER(N); FOR I=1 to N DO LINE_ABS-2(Ax[I],Ay[I]); FOR I=1 to N DO LINE_ABS-2(Ax[I]*dx,Ay[I]*dy); RETURN; END;
SCALING ALGORITHM’S C- IMPLEMENTATION #include #include
#include #define MAX 10 void main() { int i,j,x[MAX],y[MAX],n,dx,dy,gd=DETECT,gm; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n\n Enter the number of points you want to insert : "); scanf("%d",&n); if(n<2) { printf("\n\n Sorry please enter minimum two coordinates..."); getch(); exit(0); } printf("\n\n Enter the points for scaling : \n"); for(i=0;i
for(i=0;i
getch(); }
OUTPUT : Enter the number of points you want to insert : 4 Enter the coordinates of the vertices : x1, y1 : 0 0 x2, y2 : 0 100 x3, y3 : 100 0 x4, y4 : 100 100 Enter the scaling factors dx,dy : 2 2
TRANSLATION ALGORITHM TRANSLATION(Ax,Ay,tx,ty,N) Translate the line or polygon Args: Ax,Ay Array containing the vertices of line or polygon. tx,ty Translating factors.
Global : DF_PEN_X,DF_PEN_Y Local : I Stepping through polygon sides. BEGIN : DF_PEN_X Ax[N]; DF_PEN_Y Ay[N]; DISPLAY_FILE_ENTER(N); FOR I=1 to N DO LINE_ABS-2(Ax[I],Ay[I]); FOR I=1 to N DO LINE_ABS-2(Ax[I]+tx,Ay[I]+ty); RETURN; END;
TRANSLATION ALGORITHM’S C- IMPLEMENTATION
#include #include #include #define MAX 10 void main() {
int i,j,x[MAX],y[MAX],n,tx,ty,gd=DETECT,gm; clrscr(); initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n\n Enter the number of points you want to insert : "); scanf("%d",&n); printf("\n\n Enter the points for translating : \n"); for(i=0;i
OUTPUT : Enter the number of points you want to insert : 4 Enter the coordinates of the vertices : x1, y1 : 0 0 x2, y2 : 0 100 x3, y3 : 100 0 x4, y4 : 100 100
Enter the translating factors tx,ty : 100 0
ROTATION ALGORITHM ROTATION(Ax,Ay,A,N) Translate the line or polygon Args: Ax,Ay Array containing the vertices of line or polygon. A Angle of rotation. Global : DF_PEN_X,DF_PEN_Y Local : I Stepping through polygon sides. BEGIN :
DF_PEN_X Ax[N]; DF_PEN_Y Ay[N]; DISPLAY_FILE_ENTER(N); FOR I=1 to N DO LINE_ABS-2(Ax[I],Ay[I]); FOR I=1 to N DO BEGIN: Ax’[I] Ax[I]*cosA-Ay[I]*sinA; // For anti-clockwise Ay’[I] Ax[I]*sinA+Ay[I]*cosA; // For anti-clockwise FOR I=1 to N DO LINE_ABS-2(Ax’[I],Ay’[I]); RETURN; END;
ROTATION ALGORITHM’S C- IMPLEMENTATION #include #include #include #include #define MAX 10 int ROUND(float); void main() { int i,j,f,x[MAX],y[MAX],xr[MAX],yr[MAX],n,ad,gd=DETECT,gm; float ar,ca,sa; clrscr();
initgraph(&gd,&gm,"C:\\TC\\BGI"); printf("\n\n Enter the number of points you want to insert : "); scanf("%d",&n); printf("\n\n Enter the coordinates : "); for(i=0;i
} int ROUND(float x) { int y; if(x>((int)x+0.5)) y=floor(x); if(x<((int)x+0.5)) y=ceil(x); return(y); }
OUTPUT : Enter the number of points you want to insert : 4 Enter the coordinates of the vertices : x1, y1 : 0 0 x2, y2 : 0 100 x3, y3 : 100 0 x4, y4 : 100 100 Enter the rotation angle : 45 Press '1' to rotate anticlocklwise & '2' for clockwise : 1