#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

void analitico();
int x1, x2, y1, y2;

int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;

   printf("Digite x1: ");
   scanf("%i",&x1);
   printf("Digite y1: ");
   scanf("%i",&y1);
   printf("Digite x2: ");
   scanf("%i",&x2);
   printf("Digite y2: ");
   scanf("%i",&y2);

   // seta o fundo para preto
   // setbkcolor(0);
   // clrscr();

   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "");

   analitico();

   getch();
   closegraph();
   return 0;
}

void analitico()
{
   double m, b;
   int x,y,ix,iy;

   // caso o primeiro ponto esteja a direita do segundo
   if (x1 > x2)
   {
      ix = x1;
      x1 = x2;
      x2 = ix;

      iy = y1;
      y1 = y2;
      y2 = iy;
   }

   // cor 4 = pixels em vermelho
   // se a linha for vertical
   if (x1 == x2)
   {
      for (y=y1; y<y2; y++)
	 putpixel(x1,y,4);
   }
   else
   {
      // linha nao vertical
      m = (y2 - y1) / (x2 - x1);
      b = y2 - (m * x2);

      for (x=x1; x<x2; x++)
      {
         y = floor((m*x)+b);
	 putpixel(x,y,4);
      }
   }
}
