Liang-Barsky算法

 

Liang-Barsky算法

在Cohen-Sutherland算法提出後,梁友棟和Barsky又針對標準矩形窗口提出了更快的Liang-Barsky直線段裁剪算法。算法

梁算法的主要思想:3d

(1)用參數方程表示一條直線blog

(2)把被裁剪的紅色直線段看 成是一條有方向的線段,把窗口 的四條邊分紅兩類:遍歷

入邊和出邊im

 

裁剪結果的線段起點是直線和兩條入邊的交點以及始端點三 個點裏最前面的一個點,即參數u最大的那個點;d3

裁剪線段的終點是和兩條出邊的交點以及端點最後面的一個 點,取參數u最小的那個點。db

值得注意的是,當u從-∞到+∞遍歷直線時,首先對裁剪窗口的兩條邊界直線(下邊和左邊)從外面向裏面移動,img

再對裁 剪窗口兩條邊界直線(上邊和右邊)從裏面向外面移動。移動

 

若是用u1,u2分別表示 線段(u1≤u2)可見部分的開始和結束co

Liang-Barsky算法的基本出發點是直線的參數方程

 

 

(1)分析Pk=0的狀況

若是還知足qk<0

則線段徹底在邊界外,應舍 棄該線段

若是qk≥0

則進一步判斷

(2)當pk≠0時:

當pk<0時

線段從裁剪邊界延長線的外部 延伸到內部,是入邊交點

當pk > 0時

線段從裁剪邊界延長線的內部 延伸到外部,是出邊交點

線段和窗口邊界一共有四個交點,根據pk的符號,就知道 哪兩個是入交點,哪兩個是出交點

當p k < 0時:對應入邊交點

當p k > 0時:對應出邊交點

一共四個u值,再加上u=0、u=1兩個端點值,總共六個值

把pk<0的兩個u值和0比較去找最大的,把pk>0的兩個u值 和1比較去找最小的,這樣就獲得兩個端點的參數值

 

 

相關文章
相關標籤/搜索