Liang-Barsky 裁剪算法详解:参数化直线裁剪原理与实现

Liang-Barsky是一种基于参数化方程的直线段裁剪算法,利用不等式约束求取线段在窗口内的参数区间,计算高效。本文含原理与代码实现。 ## Liang-Barsky裁剪算法 ### 原理 ### 1. 用参数方程表示一条直线,用方程表示直线$P_{1}P_{2}$,其中$t$就是直线的斜率,$\mathrm{t} \in[0,1]:$ $$ \begin{equation} \left\\{ \begin{aligned} x(t)=x_{1}+\left(x_{2}-x_{1}\right) t&=x_{1}+t \Delta x \qquad 0裁剪区域内部可以表达为两个不等式: $$\begin{aligned} &x_{L}出边与入边3. 分情况讨论 - $ d=0 :$ $ q<0 $,  说明直线与裁剪框平行,并且位于裁剪框的外面,直线为不可见,可抛弃,直接结束; $ q\geq0 $,说明直线在它所平行的窗口边界的内部,还需进一步计算确定直线是否在窗口内、外、或者相交 - d<0 $,说明直线是从裁剪边界的外部延伸到内部 d>0 $, 说明直线是从裁剪边界的内部延伸到外部 对于$ d\neq0 $,可以利用式子计算直线与边界k的交点的参数$ u $。对于每条直线,可以计算直线位于裁剪窗口内线段的参数$ d_1 $和$ d_2 $. $ d_1 $的值是由那些使得直线是从外部延伸到内部的窗口边界决定。对于这些边计算$ r_i=q_i/d_i $,$ d_i= max(r_i,0) $. $ d_2 $的值是由那些使得直线是从内部延伸到窗口边界决定,$ d_2=min(r_i,1) $. 如果$ d_1 $$ d_2 $这条直线完全在窗口的外面,不可见,可抛弃,否则,根据参数$ u $的两个值,计算出裁剪后线段的端点. #### 代码 #### > 代码的思路:画一个矩形,来作为一个裁剪窗口,然后画一条黄色的直线。如果直线没有经过矩形区域,则为黄色,如果穿过矩形区域,则使用Liang-Barskey算法来进行裁剪,裁剪之后,再进行画一条黑色的直线来覆盖。 undefined
### 参考链接 ### 1. [Liang-Barsky算法](https://blog.csdn.net/weixin_34202952/article/details/94224985?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task) 2. [[OpenGL]计算机图形学:直线裁剪算法中Cohen-Sutherland算法和Liang-Barsky算法](https://blog.csdn.net/pleasecallmewhy/article/details/8393445) 3. [Liang-Barskey算法以及代码实现](https://blog.csdn.net/ding_programmer/article/details/90414243?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task)
本文结束 感谢您的阅读