Chapter 4
Bresenham’s Midpoint Line Algoritm
0 < slop =
y
x < 1
real variable: D
dx := x2 - x1
dy := y2 - y1
D := -0.5
x := x1
Y := y1
FOR i := x1 TO x2 DO
PaintPixel(x,Y)
x := x + 1
D := D + dy / dx
IF D>0 THEN
Y := Y + 1
D := D - 1
END
END
remove division and floating point arithmetics
dx := x2 - x1
dy := y2 - y1
D := -dx * (2 * dx)
x := x1
Y := y1
FOR i := x1 TO x2 DO
PaintPixel(x,Y)
x := x + 1
D := D + 2 * dy * (2 * dx)
IF D>0 THEN
Y := Y + 1
D := D - 2 * dx * (2 * dx)
END
END
Change of form in conditional
dx := x2 - x1
dy := y2 - y1
D := -dx * (2 * dx)
x := x1
Y := y1
FOR i := x1 TO x2 DO
PaintPixel(x,Y)
x := x + 1
D := D + 2 * dy * (2 * dx)
IF D<=0 THEN
ELSE
Y := Y + 1
D := D - 2 * dx * (2 * dx)
END
END
Move ‘D := D + 2 * dy’ into conditional and componsate outside the loop for the delay in
incrementing D.
dx := x2 - x1
dy := y2 - y1
D := 2 * dy - dx
x := x1
Y := y1
FOR i := x1 TO x2 DO
PaintPixel(x,Y)
x := x + 1
IF D<=0 THEN
D := D + 2 * dy
ELSE
Y := Y + 1
D := D - 2 * dx + 2 * dy
END
END
Unroll to save one iteration
dx := x2 - x1
dy := y2 - y1
D := 2 * dy - dx
x := x1
Y := y1
PaintPixel(x,Y)
FOR i := x1+1 TO x2 DO
x := x + 1
IF D<=0 THEN
D := D + 2 * dy
ELSE
Y := Y + 1
D := D - 2 * dx + 2 * dy
END
PaintPixel(x,Y)
END
Constant folding
dx := x2 - x1
dy := y2 - y1
d1 := 2 * dy
d2 := 2 * (dy - dx)
D := d1 - dx
x := x1
Y := y1
PaintPixel(x,Y)
FOR i := x1+1 TO x2 DO
x := x + 1
IF D<=0 THEN
D := D + d1
ELSE
Y := Y + 1
D := D + d2
END
PaintPixel(x,Y)
END
index variable
dx := x2 - x1
dy := y2 - y1
d1 := 2 * dy
d2 := 2 * (dy - dx)
D := d1 - dx
x := x1
Y := y1
PaintPixel(x,Y)
WHILE x < x2 DO
x := x + 1
IF D<=0 THEN
D := D + d1
ELSE
Y := Y + 1
D := D + d2
END
PaintPixel(x,Y)
END
4.1 Generalization to other octans
| 1 | none |
| 2 | switch roles of x & y |
| 3 | |
| 4 | |
| 5 | draw from p2 to p1 |
| 6 | |
| 7 | |
| 8 | |