liang-barsky算法是針對標準矩形更快的直線段裁剪算法
基本出發點是直線的參數方程
- 首先給定一個矩形的窗口,我們將矩形的窗口的四條邊分成兩類:入邊和出邊
- 我們將需要裁剪的直線段(黑色表示)看成一條有方向的線段,該線段使用參數方程可以表示爲:x = x1 + u * ( x2 - x1 ) , y = y1 + u* ( y2 - y1) (0 <= u <= 1) , 所以起始點的 u = 0 ,末點的 u = 1 ,越往左 u -> 負無窮 ,往右趨向於正無窮
- 最終裁剪的線段起點是直線和兩條入邊的交點以及初始端點這三個點中參數 u 最大的那個點 ,根據上圖例子就是給定線段的初始端點
- 最終裁剪的線段終點是直線和兩條出邊的交點以及初始末點這三個點中參數 u 最小的那個點,根據上圖例子就是給定線段與ymax的交點
- 如果我們用 u1, u2 分別表示最終線段可見部分的起點與終點,則
u1 = max ( 0 , ul , ub )
u2 = min ( 1, ut , ur )
- 參數式推導:
設給定的線段的起始點爲(x1,y1) 結束點爲 (x2,y2)
當 pk == 0:
如果 qk < 0: 則線段完全在給定矩形邊界外,應當捨棄該線段
當 pk != 0:
如果qk < 0: 線段從裁剪邊界的延長線的外部延申到內部,是入邊的交點
如果qk > 0: 線段從裁剪邊界延長線的內部延伸到外部 ,是出邊交點
線段和窗口邊界一共有四個交點,,根據pk的符號就知道那兩個是入交點哪兩個是出交點(pk<0對應入邊交點,pk>0對應出邊交點)
可知uk = qk/pk ,則可根據這四個u值和u=0,u=1,一共6個u值就可以找到兩個端點