Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  cg
Language: C/C++
Code:
     /* Write C++/Java program to draw line using DDA and Bresenham‘s algorithm. Inherit pixel
class and Use function overloading. */



#include<iostream>
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include<stdlib.h>

using namespace std;
class pixel
{
     int x, y, color;
public:
     void drawpixel(int tx, int ty, int tcolor)
{
          x = tx;
          y = ty;
          color = tcolor;
          putpixel(x, y, color);
}
};
class linealgo : public pixel
{
     int x1, x2, y1,y2;
     public:
     linealgo() { };
     linealgo(int px1, int py1, int px2, int py2)
     {
          x1 = px1; y1 = py1; x2 = px2; y2 = py2;
     }

     int sign(float);
     void drawline();
     void drawline(int color);
};

void linealgo :: drawline()
{
     int i, dx, dy, steps;
     float x, y;
     float xinc, yinc;
     dx = (x2 - x1);
     dy = (y2 - y1);

     if(abs(dx) >= abs(dy))
          steps = dx;
     else
          steps = dy;
     xinc = (float)dx / steps;
     yinc = (float)dy / steps;

     x = x1;
     y = y1;

     drawpixel(x, y, WHITE);

     for(i = 1;i < steps; i++)
     {
          x += xinc;
          y += yinc;

          x1 = x + 0.5;
          y1 = y + 0.5;
          drawpixel(x1, y1, WHITE);
     }
     //SaveScreen("C:\\op.bmp");
}


void linealgo :: drawline(int color)
{
     int s1, s2, exchange, y, x, i;
     float dx, dy, g, temp;
     dx = abs(x2 - x1);
     dy = abs(y2 - y1);
     x = x1;
     y = y1;
     s1 = sign(x2 - x1);
     s2 = sign(y2 - y1);
     if(dy > dx)
     {
          temp = dx;
          dx = dy;
          dy = temp;
          exchange = 1;
     }
     else
          exchange = 0;
     g = 2 * dy - dx;
     i = 1;
     while(i <= dx)
     {
          drawpixel(x, y, color);
     //     delay(50);
          while(g >= 0)
          {
               if(exchange == 1)
                    x = x + s1;
               else
                    y = y + s2;
               g = g - 2 * dx;
          }
          if (exchange == 1)
               y = y + s2;
          else
               x = x + s1;
          g = g + 2 * dy;
          i++;
     }
}

int linealgo :: sign(float arg)
{
     if(arg < 0)
          return -1;
     else if(arg == 0)
          return 0;
          else return 1;
}

int main()
{
     int gd = DETECT, gm;

     linealgo d;
     int tx1, ty1, tx2, ty2;
     cout<<"\nPlease enter the co-ordinates of the line (x1,y1, x2, y2)\n";
     cin>>tx1>>ty1>>tx2>>ty2;
     initgraph(&gd,&gm,NULL);
     d = linealgo(tx1, ty1, tx2, ty2);
     d.drawline();
     // Bresenham's
     cout<<"\nPlease enter the co-ordinates of the line (x1,y1, x2, y2)\n";
     cin>>tx1>>ty1>>tx2>>ty2;
     d = linealgo(tx1, ty1, tx2, ty2);
     d.drawline(5);
     getch();
     closegraph();
     return 0;
}


Comments: