裁剪算法


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

 

二、具體實現

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM