DDA Line Drawing Algorithm - C++ program - Graphics & Multimedia Lab

DDA Line Drawing Algorithm 

Line Drawing - C++ implementation - Graphics & Multimedia Lab


Sourcecode:


//DDA LINE DRAWING ALGORITHM

#include<graphics.h>

#include<iostream>

using namespace std;



int gd=DETECT,gm,maxy,points[1000];

float dx,dy,m,tmp,x,y;

FILE *fp;

int a0,b0,a1,b1;

int i,count,np;



void DDALine(int x0, int y0, int x1, int y1)

 {

  i=0;

  dx=x1-x0;

  dy=y1-y0;

  maxy=getmaxy();



  if(dx==0)

   {

    for(y=y0;y<=y1;y++)

    {

     putpixel(x0,y,WHITE);

     points[i]=x0;

     points[i+1]=y;

     i+=2;

    }

   }



  else if(dy==0)

   {

    for(x=x0;x<=x1;x++)

     {

      putpixel(x,y0,WHITE);

      points[i]=x0;

      points[i+1]=y;

      i+=2;

     }

   }



  else if(dy<=dx)

   {

    m=dy/dx;

    y=y0;

    for(x=x0;x<=x1;x++)

     {

      putpixel(x,(int)(maxy-y),WHITE);

      points[i]=x;

      points[i+1]=(int)y;

      i+=2;

      y=y+m;

     }

   }



  else

   {

    m=dx/dy;

    x=x0;

    for(y=y0;y<=y1;y++)

     {

      putpixel((int)x,maxy-y,WHITE);

      points[i]=(int)x;

      points[i+1]=y;

      i+=2;

      x=x+m;

     }

   }

 }



main()

 {

  initgraph(&gd,&gm,NULL);



  fp=fopen("linput.txt","r");

  if(fp==NULL)

   {

    printf("eRROR !");

    getch();

    exit(0);

   }



  fscanf(fp,"%d",&a0);

  fscanf(fp,"%d",&b0);

  fscanf(fp,"%d",&a1);

  fscanf(fp,"%d",&b1);

  fclose(fp);



  DDALine(a0,b0,a1,b1);



  fp=fopen("loutput.txt","w");

  fprintf(fp,"%s","Plotted points are:-\n");



  count=i;

  np=0;

  for(i=0;i<count;i+=2)

   {

    fprintf(fp,"(%d, %d) ",points[i],points[i+1]);

    np++;

    if(np==5) { fprintf(fp,"\n"); np=0; }

   }

  fclose(fp);



  getch();

  closegraph();

  return 0;

 }
Output: 
nn@linuxmint ~ $ g++ lab1.cpp -lgraph
nn@linuxmint ~ $ ./a.out


"linput.txt"
18 22 70 40


Plotted points are:-
(18, 22) (19, 22) (20, 22) (21, 23) (22, 23) 
(23, 23) (24, 24) (25, 24) (26, 24) (27, 25) 
(28, 25) (29, 25) (30, 26) (31, 26) (32, 26) 
(33, 27) (34, 27) (35, 27) (36, 28) (37, 28) 
(38, 28) (39, 29) (40, 29) (41, 29) (42, 30) 
(43, 30) (44, 30) (45, 31) (46, 31) (47, 32) 
(48, 32) (49, 32) (50, 33) (51, 33) (52, 33) 
(53, 34) (54, 34) (55, 34) (56, 35) (57, 35) 
(58, 35) (59, 36) (60, 36) (61, 36) (62, 37) 
(63, 37) (64, 37) (65, 38) (66, 38) (67, 38) 
(68, 39) (69, 39) (70, 39) 

2 comments:

Related Posts Plugin for WordPress, Blogger...