24 lines
652 B
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 */
|
|
}
|
|
}
|