Showing posts with label DDA line drawing algorithm. Show all posts
Showing posts with label DDA line drawing algorithm. Show all posts

Thursday, January 23, 2020

DDA line drawing algorithm Implementation in C-Language

Computer graphics programming can be written in computer languages like C, C++, java and many more.

DDA line drawing algorithm:


DDA ( Digital Differential Analyzer ) Algorithm is scan conversion of line. It accepts end points of line A(x1,y1) and B(x2,y2) , finds intermediate pixel location and display on display device.
we know line equation y=mx+c where m is slope and c is y-intercept as constant.
slope m=(y2-y1)/(x2-x1)
              = dy/dx      where  dx=(x2-x1)  and dy=(y2-y1)   

we can calculate dy if we know dx as dy=m.dx and  we can calculate dx if we know dy as dx=dy/m.
from above equation we can say if dx=1 then dy=m and if dy=1 then dx=1/m.

DDA algorithm increments by unit value in one coordinate and second coordinate can be calculated. Unit increment is based on slope. if abs(slope) <1 then increment by one in x coordinate and y coordinate increment  can be calculated by yinc=m.
xinc=1,yinc=m
if abs(slope)>1 then increment by one in y coordinate and calculate x coordinate increment as xinc=1/m.
yinc=1,xinc=1/m
using increment factor all intermediate values can be calculated as
xnext=xcurrent+xinc
ynext=ycurrent+yinc
this prcess is recurssive till we reach  last coordinate of line (x2,y2).


Algorithm Steps:

1.Accept input (x1,y1) and (x2,y2) as end points of Line
2. Calculate dx=(x2-x1)  and dy=(y2-y1).
3. If abs(dx)>=abs(dy)
               length=dx
       else
           length=dy
4. Calculate xinc=dx/length and yinc=dy/length.
5. Plot first pixel (x1,y1) .
6. Calculate xnext=xcurrent+xinc  and ynext=ycurrent+yinc and plot(xnext, ynext).
7. Repeat step 6 ,length times.   
8. Stop  

DDA line drawing algorithm Implementation in C-Language:


Program:

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>

void main()
{
int gd=DETECT,gm;
int i,len;
float x1,y1,x2,y2,dx,dy,xinc,yinc;
initgraph(&gd,&gm,"c:\\turboc3\\bgi");
printf("Enter x1");
scanf("%f",&x1);
printf("Enter y1");
scanf("%f",&y1);
printf("Enter x2");
scanf("%f",&x2);
printf("Enter y2");
scanf("%f",&y2);
dx=(x2-x1);
dy=(y2-y1);
if(abs(dx)>=abs(dy))
{
len=dx;
}
else
{
len=dy;
}
xinc=dx/len;
yinc=dy/len;
putpixel(x1,y1,4);
for(i=1;i<=len;i++)
{
x1=x1+xinc;
y1=y1+yinc;
putpixel(x1,y1,4);
}
getch();
}

Output: