CMSC 427 - Computer Graphics

Fall 2003

Generalized Bresenham's Line Drawing Algorithm

This is adapted from the textbook Procedural Elements for Computer Graphics by David F. Rogers.
This draws a line from (x1, y1) to (x2, y2).
#define sign(x) ((x > 0)? 1 : ((x < 0)? -1: 0))
x = x1; y = y1;
dx = abs(x2 - x1); dy = abs(y2 - y1);
s1 = sign(x2 - x1); s2 = sign(y2 - y1);
swap = 0;
if (dy > dx) { temp = dx; dx = dy; dy = temp; swap = 1;}
D = 2*dy - dx;
for (i = 0; i < dx; i++) {
display_pixel (x, y);
while (D >= 0)
{ D = D - 2*dx; if (swap) x += s1; else y += s2; }
D = D + 2*dy; if (swap) y += s2; else x += s1;
}