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
- Set $t_{min}=0, t_{max}=1$.
- 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$. - 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))$
- 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.