Custom Search

Thursday 30 October 2014

Line using DDA algorithm in any quadrant.

Write a program to draw a line using DDA algorithm in any quadrant.


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

void main()
{
     clrscr();
     intgd = DETECT, gm;
     detectgraph(&gd, &gm);
     initgraph(&gd, &gm, "");
     int x1,x2,y1,y2,xd,yd;
     xd=getmaxx();
     yd=getmaxy();
     line(xd/2,0,xd/2,yd);
     line(0,yd/2,xd,yd/2);
     printf("enter x1, y1\n");
     scanf("%d %d",&x1,&y1);
     printf("enter x2, y2\n");
     scanf("%d %d",&x2,&y2);
     intdx,dy,steps;
     dx=abs(x2-x1);
     dy=abs(y2-y1);

     if(dx>dy)
  {
    steps=dx;
      }
  else
      {
     steps=dy;
       }

     float xi,yi,x,y;
     xi=dx/float(steps);
     yi=dy/float(steps);
     int mx=xd/2,my=yd/2;

 // 1st quadrant

      if(x1>0 && y1>0)
      {
        if(x2>0 && y2>0)
     {
     if(x2<x1)
             xi=-xi;
              if(y2<y1)
      yi=-yi;
            }
          
      if(x2<0 && y2>0)
            {
                     xi=-xi;
             if(y2<y1)
          yi=-yi;
               }

       if(x2<0 && y2<0)
       {
                      xi=-xi;
      yi=-yi;
                }

        if(x2>0 && y2<0)
               {
                     if(x2<x1)
                          xi=-xi;
yi=-yi;
}
          }


// 2nd quadrant
        if(x1<0 && y1>0)
        {
if(x2>0 && y2>0)
              {
xi=xi;
if(y2<y1)
yi=-yi;
}

                if(x2<0 && y2>0)
                {
if(x2<x1)
xi=-xi;
if(y2<y1)
yi=-yi;
                }

               if(x2<0 && y2<0)
               {
     if(x2<x1)
          xi=-xi;
     yi=-yi;
               }

               if(x2>0 && y2<0)
               {
     xi=xi;
     yi=-yi;
       }
        }     


//3rd quadrant

       if(x1<0 && y1<0) 
       {
              if(x2>0 && y2>0)
              {
      xi=xi;
    yi=yi;
      }
     
              if(x2<0 && y2>0)
              {
                     if(x2<x1)
         xi=-xi;
                     yi=yi;
              }

              if(x2<0 && y2<0)
              {
      if(x2<x1)
          xi=-xi;
     if(y2<y1)
          yi=-yi;
     }

              if(x2>0 && y2<0)
              {
      xi=xi;
    if(y2<y1)
          yi=-yi;       
              }
      }

 //4th Quadrant

     if(x1>0 && y1<0)
     {
          if(x2>0 && y2>0)
          {
      if(x2<x1)
           xi=-xi;
      yi=yi;
          }

          if(x2<0 && y2>0)
          {
               xi=-xi;
yi=yi;
}

          if(x2<0 && y2<0)
          {
        xi=-xi;
if(y2<y1)
     yi=-yi;
          }

          if(x2>0 && y2<0)
          {
        if(x2<x1)
             xi=-xi;
               if(y2<y1)
     yi=-yi;
          }      
     }

 x=x1;
 y=y1;
putpixel(mx+x1,my-y1,4);
putpixel(mx+x2,my-y2,4);

for(int k=1;k<=steps;k++)
{
putpixel(mx+floor(x),my-floor(y),14);
x=x+xi;    
         y=y+yi;
delay(40);
}
getch();
}




No comments:

Post a Comment

Laptops