0%

Liang-Barsky Algorithm

Liang-Barsky

参数方程

两点式:

换下位置,并设其等于 $t$ :

其中 $(x_1,y_1)$ 为左下边界, $(x_2,y_2)$ 为右上边界, $(x,y)$ 位于其间。

则参数方程可表示为:

裁剪窗口不等式

( $xw,yw$ 为边界)

不等式可表示为:

其中, $k=1,2,3,4$ 分别表示左右下上四边界。

$p$ 与 $q$ 的定义为:

判定

条件 线的位置
$p_k=0$ 平行于裁剪边界
$p_k=0$ 且 $q_k<0$ 完全在边界外
$p_k = 0$ 且 $q_k ≥ 0$ 在边界内
$p_k < 0$ 线从外到内
$p_k > 0$ 线从内到外

参数 $t_1,t_2$ 可以判定线的某部分位于裁剪矩形内,当:

若 $t_1 > t_2$, 则线完全在窗口外,可舍弃;否则,裁剪线的止点可由参数 $t$ 决定。

Algorithm

  1. Set $t_{min}=0, t_{max}=1$.
  2. Calculate the values of $t$ ($t(left)$, $t(right)$, $t(top)$, $t(bottom)$),
    (a) If $t < t_{min}$ ignore that and move to the next edge.
    (b) else separate the $t$ values as entering or exiting values using the inner product.
    (c) If $t$ is entering value, set $t_{min}=t$; if $t$ is existing value, set $t_{max} = t$.
  3. If $t_{min} < t_{max}$, draw a line from $(x_1 + t_{min}(x_2-x_1), y_1 + t_{min}(y_2-y_1))$ to $(x_1 + t_{max}(x_2-x_1), y_1 + t_{max}(y_2-y_1))$
  4. If the line crosses over the window, $(x_1 + t_{min}(x_2-x_1), y_1 + t_{min}(y_2-y_1))$ and $(x_1 + t_{max}(x_2-x_1), y_1 + t_{max}(y_2-y_1))$ are the intersection point of line and edge.

Reference

https://www.geeksforgeeks.org/liang-barsky-algorithm/