#include "math.h"
#include "stdio.h"
#include "stdlib.h"
#define ESC 0x1b
#include "graphics.h"
void MidPointLine(int x0,int y0,int x1,int y1,int color)
{
int dx,dy,incrE,incrNE,d,x,y,m,n;
float k;
if(x0>x1)
{ m=x0;x0=x1;x1=m;
n=y0;y0=y1;y1=n;
}
dx=x1-x0;
dy=y1-y0;
if(x1!=x0)
{
k=(float)dy/dx;
if(k>=0)
{
if(k<=1)
{
d=dx-2*dy;
incrE=-2*dy;
incrNE=2*(dx-dy);
x=x0,y=y0;
putpixel(x,y,color);
while(x<x1)
{
if(d>0)
d+=incrE;
else
{
d+=incrNE;
y++;
}
x++;
putpixel(x,y,color);
}
}
else
{
d=dy-2*dx;
incrE=2*dx;
incrNE=-2*(dx-dy);
x=x0,y=y0;
putpixel(x,y,color);
while(y<y1)
{
if(d<0)
d+=incrE;
else
{
d+=incrNE;
x++;
}
y++;
putpixel(x,y,color);
}
}
}
else if(k>-1)
{
d=-dx-2*dy;
incrE=-2*dy;
incrNE=-2*(dx+dy);
x=x0,y=y0;
putpixel(x,y,color);
while(x<x1)
{
if(d<0)
d+=incrE;
else
{
d+=incrNE;
y--;
}
x++;
putpixel(x,y,color);
}
}
else
{
d=2*dx-dy;
incrE=-2*dx;
incrNE=-2*(dx+dy);
x=x0,y=y0;
putpixel(x,y,color);
while(y>y1)
{
if(d>0)
d+=incrE;
else
{
d+=incrNE;
x++;
}
y--;
putpixel(x,y,color);
}
}
}
else
{
x=x0;y=y0;
if(y1>y0)
while(x<y1)
{
putpixel(x,y,color);
y++;
}
else
while(x>y1)
{
putpixel(x,y,color);
y--;
}
}
}
void main()
{
int gdrive=DETECT, gmode=0,xa,xb,ya,yb;
initgraph(&gdrive, &gmode, "d:\\tc");
setbkcolor(BLACK);
MidPointLine(300, 20, 20, 350, WHITE);
printf("please close it with 'ESC' ");
while(getch()!=ESC);
closegraph();
}