Wednesday, 4 June 2014

Bresenham Line drawing program (General) in text mode


                                                                            
#include<stdio.h>
                                                                               
main()
{
 BresLine(0, 9, 14, 1);
}
                                                                               
BresLine(int x1, int y1, int x2, int y2)
{
 int x, y, dx, dy, dx1, dy1, p, temp, k;
 float slope;
 dx1 = x2 - x1; dy1 = y2 - y1;
 dx = abs(dx1); dy = abs(dy1);
 if(dx == 0) verline(x1, y1, x2, y2);
 else if(dy == 0) horline(x1, y1, x2, y2);
 else if(dx1 == dy1) diagline(x1, y1, x2, y2);
 else
 {

 x = x1; y = y1; 
 slope = (float)dy/dx;
 if(slope > 1)
   {
    swap(&x1, &y1); swap(&x2, &y2);
    temp = dx; dx = dy; dy = temp;
    temp = x; x = y; y = temp;
   }

 p = 2 * dy - dx;
 if(slope > 1) printf("k = 0, x = %d, y = %d\n", y, x);
 else printf("k = 0, x = %d, y = %d\n", x, y);
 for(k=0; k < dx; k++)
   {
    if(p < 0)
      {
       if(x < x2) x++; else x--;
       p = p + 2 * dy;
      }
    else
      {
       if(y < y2) y++; else y--;
       if(x < x2) x++; else x--;
       p = p + 2 * (dy - dx);
      }
     if(slope > 1) printf("k = %d, x = %d, y = %d\n",k, y, x);
     else printf("k = 0, x = %d, y = %d\n", x, y);
   }
 }
}

swap(int *a, int *b)
{
 int tmp;
 tmp = *a; *a = *b; *b = tmp;
}     
    
horline(int x1, int y1, int x2, int y2)
{
 int i,j;
 if(x1 < x2)
  for(i = x1; i <= x2; i++)
     printf("x = %d, y = %d\n",i, y1);
 else
  for(i = x2; i <= x1; i++)
     printf("x = %d, y = %d\n",i, y1);
}
                                                                                       
verline(int x1, int y1, int x2, int y2)
{
 int i,j;
 if(y1 < y2)
  for(j = y1; j <= y2; j++)
     printf("x = %d, y = %d\n",x1, j);
 else
  for(j = y2; j <= y1; j++)
     printf("x = %d, y = %d\n",x1, j);
}
                                                                                       
diagline(int x1, int y1, int x2, int y2)
{
 int i,j;
 if(x1 < x2)
  for(i = x1; i <= x2; i++)
    printf("x = %d, y = %d\n",i, i);
 else
  for(i = x2; i <= x1; i++)
    printf("x = %d, y = %d\n",i, i);
}

No comments:

Post a Comment