Cohen-Sutherland算法(編碼裁剪算法)
一、基本思想
采用編碼的方式對直線段分三種情況處理
(3)重點在於2種情況都不滿足的時候,需要按交點來進行分段,然后再判定。
二、編碼規則
(1)以上三種情況都采用編碼的方式來快速解決。
每條線段的端點偶讀賦以四位二進制碼D3D2D1D0,編碼規則如下:
左右下上,即邊界之外為1,否則為0。
(2)
三、具體實現
裁剪出一條線段,先求出端點編碼code1和code2,然后進行“或” 和“與” 運算。
或0取,與非棄。
(3)若以上2種情況都不滿足,例如:
此時將p1和p2的編碼進行與或操作發現,或不為0,與為0。則采用分段的方法。按左右下上的順序求出交點P3,P1P3在窗外則舍棄。
得到p3p2時,再對p3p2進行編碼測試,發現也屬於第三種情況。則再求出交點p4。經測試,p3p4可取,p4p2舍棄。
四、額外說明
(1)虛交點:對於舍棄的情況還有一種特例,如下圖中的藍線。
此時AB點進行編碼測試也屬於第三種情況,但是卻需要舍棄。這就需要計算出虛交點,然后分段舍棄了AC和CB。
(2)交點的計算方法
因為通常都是已經邊界坐標,所以都是利用斜率來按照左下右上的順序計算交點。
中點分割算法
一、基本思想
中點分割用到的測試方法仍然是編碼測試,但是用二分逼近來確定直線段與窗口的交點。而具體的實現,也是根據中點的位置情況來討論的。
二、具體實現
何為誤差范圍?
比如在1024的分辨率下,最多也就進行10次二分,不可能永遠分下去。所以需要提前設定誤差范圍。
中點分割算法相比於Cohen-Sutherland算法,避免了求交,只需計算中點坐標即可完成,宜於硬件實現 。
Liang-Barsky算法
一、基本思想
把被裁剪直線看成一條有向線段並用參數方程表示,進而確定出要獲取的部分。
1.參數表示
2.方向設定確認點
將四條邊分為入邊和出邊
u1u2則為裁剪區域內的線段
3.不等式變換
裁剪區域內的點可由以上不等式得到,移項變換得
我們可以
4.分類討論
(1)pk=0
a. p1&p2=0,此時直線垂直,若q1<0或q2<0則直線在裁剪區域外,直接舍棄。
b. p3&p4=0,此時直線平行,若q3<0或q4<0則直線在裁剪區域外,直接舍棄。
c. p1&p2=0且q1≥0或q2≥0,p3&p4=0且q3≥0或q4≥0(即上圖B和F的情況)。則進一步根據交點判斷。
(2)pk≠0
此處根據具體的ΔxΔy數據來得到pk的正負
如圖,此種情況為舍棄。u1>u2
二、具體實現