C - Digital Differential Analyzer Program in C

The digital differential analyzer ( DDA ) is a scan-conversion line algorithm based on calculating either dx or dy, using the equations dy=m*dx and dx=dy/m.

The digital differential analyzer ( DDA ) is a scan-conversion line algorithm based on calculating either dx or dy, using the equations dy=m*dx and dx=dy/m.

in this algorithm, the line is sampled at unit intervals in one coordinate and determine corresponding integer values nearest the path for another coordinate. If slope m<1,we sample at unit x intervals ( dx=1) and compute each successive y value as Yk+1=Yk+m. If m>1 we reverse the role of x andy. We sample at unity intervals and calculate each succeeding x value as Xk+1=Xk+1/m.

Algorithm

  1. Input the values of ( x1,y1 ) and ( x2,y2 ) . 
  2. Compute the slope m=dy/dx=( y2-y1 )/( x2-x1 ) . 
  3. If m<1, increment x 1by 1.then y1=y1+m. 
  4. Plot ( x1 , y1 ). 
  5. Repeat the step3,4 till x1<=x2 . 
  6. If m>1, increment y1 by 1 and x1=x1+1/m 
  7. Plot (x1, y1 ) . 
  8. Repeat the sep 6,7 till y1<=y2 .

Source Code


#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<dos.h>
void main()
{
          int gd=DETECT,gm;
          float i,x1,y1,x2,y2,dy,dx,m;
          initgraph(&gd,&gm,"c:\\tc\\bgi");
          printf("Direct line drawing algorithm\n");
          printf("put the values of x1 and y1\n");
          scanf("%f %f",&x1,&y1);
          printf("put the values of x2 and y2\n");
          scanf("%f %f",&x2,&y2);
          dx=x2-x1;
          dy=y2-y1;
          m=dy/dx;
          if(m<=1)
          {
          for(i=1;i<=x2;i++)
          {
                   x1=x1+1;
                   y1=y1+m;
                   putpixel(x1,y1,RED);
                   }
                   }
          if(m>1)
          {
                   while(y1<=y2)
                   {
                   x1=x1+1/m;
                    y1=y1+1;
                   putpixel(x1,y1,RED);
                    }
                   }
          getch();
}

    You May Also Like...