Site hosted by Angelfire.com: Build your free website today!

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#include <stdlib.h>

 

//esta funci˘n imprime un pixel en pantalla.

void ponerpixel(int x, int y, int color)

    {

      union REGS s;

      s.h.ah=0xC;

      s.h.al=color;

      s.h.bh=0;

      s.x.cx=x;

      s.x.dx=y;

      int86 (0x10,&s,&s);

    }//fin poner pixel

 

void principal()

   {

      int i,j;

      clrscr();

      for (i=6;i<20;i++)

       {

          gotoxy(13,i);

          printf("*");

          gotoxy(67,i);

          printf("*");

       }

      for (i=14;i<67;i++)

       {

          gotoxy(i,6);

          printf("*");

          //gotoxy(i,7);

          //printf("*");

          gotoxy(i,19);

          printf("*");

       }

      gotoxy (28,9);

      printf ("LINEAS CON EL ALGORITMO");

      gotoxy (34,10);

      printf ("DE BRESENHAM");

      gotoxy (35,13);

      printf ("X0= ");

      gotoxy (35,14);

      printf ("Y0= ");

      gotoxy (35,15);

      printf ("Xf= ");

      gotoxy (35,16);

      printf ("Yf=");

   }

 

//esta funcion realiza lineas basandose en el algoritmo de bresenham

void linea (int x0, int y0, int x1, int y1, int color)

    {

      int dx, dy, dy2, dxy2, x, y, xf, yf, p, mx, my;

      int colo=0;

      dx=abs(x1-x0);

      dy=abs(y1-y0);

      //se comparan los deltas para saber si la linea es

      //mas vertival o mas horizontal

      if (dy <= dx)// en este caso es mas horizontal

          {

            p=2*dy-dx;

            dy2=2*dy;

            dxy2=2*(dy-dx);

            if (x0 > x1)//sirve para ver de donde a donde va la linea

                {       //x1 <-- x0

                  x=x1;

                  y=y1;

                  xf=x0;

                  my=(-1);

                }// fin del if

            else

                {         // x0 --> x1

                  x=x0;

                  y=y0;

                  xf=x1;

                  my=1;

                }//fin del else

            ponerpixel (x,y,color);

            //este if sirve para saber si la linea va hacia arriba o

            // va hacia abajo

            if (((y1-y0)*my) > 0) //en este caso va hacia abajo

                {

                  while (x < xf)

                      {

                        x++;

                        if (p < 0)

                            p+=dy2;

                        else

                            {

                             y++;

                             p+=dxy2;

                            }//fin del else

                        ponerpixel(x,y,color);

                      }//fin del while

                }//fin del if

            else //en este caso va hacia arriba

                {

                  while (x < xf)

                      {

                        x++;

                        if (p < 0)

                            p+=dy2;

                        else

                            {

                             y--;

                             p+=dxy2;

                            } //fin del else

                        ponerpixel (x, y, color);

                      }//fin del while

                }//fin del else

          }//fin del if

      else // en este caso es mas vertical y se toma como referencia y

          {

            p=2*dx-dy;

            dy2=2*dx;

            dxy2=2*(dx-dy);

            if (y0 > y1)    // y1 <-- y0

                {

                  y=y1;

                  x=x1;

                  yf=y0;

                  mx=(-1);

                }//fin del if

            else // y0 --> y1

                {

                  y=y0;

                  x=x0;

                  yf=y1;

                  mx=1;

                }//fin del else

            ponerpixel (x,y,color);

            if (((x1-x0) * mx) > 0) //la linea va hacia abajo

                {

                  while (y < yf)

                      {

                        y++;

                        if (p < 0)

                            p+=dy2;

                        else

                            {

                             x++;

                             p+=dxy2;

                            }//fin del else

                        ponerpixel (x,y,color);

                      }//fin del while

                }//fin del if

            else // la linea va hacia arriba

                {

                  while (y < yf)

                      {

                        y++;

                        if (p < 0)

                            p+=dy2;

                        else

                            {

                             x--;

                             p+=dxy2;

                            }//fin del else

                        ponerpixel (x,y,color);

                      }//fin del while

                }//fin del else

          }//fin del else

    }//fin de linea

 

void main()

{

    int x0, y0, xf, yf, color=1;

    char op='y';

    union REGS r;

    do

      {

          clrscr();

          principal ();

          gotoxy (40,13);

          fflush(stdin);

          scanf ("%d",&x0);

          gotoxy (40,14);

          fflush(stdin);

          scanf ("%d",&y0);

          gotoxy (40,15);

          fflush(stdin);

          scanf ("%d",&xf);

          gotoxy (40,16);

          fflush(stdin);

          scanf ("%d",&yf);

          clrscr();

          r.x.ax=0x6;

          int86(0x10,&r,&r);

          linea(x0, y0, xf, yf, color);

          getche();

          clrscr();

          r.x.ax=0x3;

          int86(0x10,&r,&r);

          principal();

          gotoxy(17, 17);

          printf ("Deseas seguir utilizando el programa y/n... : ");

          scanf("%c",&op);

          scanf ("%c",&op);

          if (op == 'n' | op == 'N')

            {

                gotoxy(28,18);

                printf ("­­­Fin del programa...!!!");

            }

          getch();

      }while (op =='y' | op=='Y');

 

}//fin del main