Liang–Barsky algorithm

In computer graphics, the Liang–Barsky algorithm (named after You-Dong Liang and Brian A. Barsky) is a line clipping algorithm. The Liang–Barsky algorithm uses the parametric equation of a line and inequalities describing the range of the clipping box to determine the intersections between the line and the clipping box. With these intersections it knows which portion of the line should be drawn. This algorithm is significantly more efficient than Cohen–Sutherland.

The idea of the Liang-Barsky clipping algorithm is to do as much testing as possible before computing line intersections. Consider first the usual parametric form of a straight line:

x = x_0 %2B u (x_1 - x_0) = x_0 %2B u \Delta x\,\!
y = y_0 %2B u (y_1 - y_0) = y_0 %2B u \Delta y\,\!

A point is in the clip window, if

x_{\text{min}} \le x_0 %2B u \Delta x \le x_{\text{max}}\,\!

and

y_{\text{min}} \le y_0 %2B u \Delta y \le y_{\text{max}}\,\!,

which can be expressed as the 4 inequalities

u p_k \le q_k, \quad k = 1, 2, 3, 4\,\!,

where

p_1 = -\Delta x  ,               q_1 = x_0 - x_{\text{min}}\,\! (left)
p_2 = \Delta x  ,                q_2 = x_{\text{max}} - x_0\,\! (right)
p_3 = -\Delta y  ,               q_3 = y_0 - y_\text{min}\,\! (bottom)
p_4 = \Delta y   ,               q_4 = y_\text{max} - y_0\,\! (top)

To compute the final line segment:

  1. A line parallel to a clipping window edge has p_k = 0 for that boundary.
  2. If for that k, q_k < 0, the line is completely outside and can be eliminated.
  3. When p_k < 0 the line proceeds outside to inside the clip window and when p_k > 0, the line proceeds inside to outside.
  4. For nonzero p_k, u = \frac{q_k}{p_k} gives the intersection point.
  5. For each line, calculate u_1 and u_2. For u_1, look at boundaries for which p_k < 0 (outside -> in). Take u_1 to be the largest among \left(0,\frac{q_k}{p_k}\right). For u_2, look at boundaries for which p_k > 0 (inside -> out). Take u_2 to be the minimum of \left(1, \frac{q_k}{p_k}\right). If u_1 > u_2, the line is outside and therefore rejected.

See also

Algorithms used for the same purpose:

References

External links