crystal/bres.c

24 lines
652 B
C

/**
* bres.c
*
* copied from https://de.wikipedia.org/wiki/Diskussion:Bresenham-Algorithmus#kompakt_fehler?
**/
#include<stdlib.h> /* abs */
extern int paint_pixel(unsigned int x, unsigned int y, unsigned char clr);
void line(int x0, int y0, int x1, int y1, unsigned char clr)
{
int dx = abs(x1-x0), sx = x0<x1 ? 1 : -1;
int dy = -abs(y1-y0), sy = y0<y1 ? 1 : -1;
int err = dx+dy, e2; /* error value e_xy */
for(;;){ /* loop */
paint_pixel(x0,y0,clr);
if (x0==x1 && y0==y1) break;
e2 = 2*err;
if (e2 > dy) { err += dy; x0 += sx; } /* e_xy+e_x > 0 */
if (e2 < dx) { err += dx; y0 += sy; } /* e_xy+e_y < 0 */
}
}