裁剪算法——Cohen-Sutherland算法
阿新 • • 發佈:2018-09-27
矩形窗 比較 算法比較 效率比較 條件 分享圖片 erl 過程 矩形
2)若點p1(x1,y1),p2(x2,y2)均在窗口外,且滿足下列四個條件之一:——>“簡棄”之(不要了)
3)如果直線段既不滿足“簡取”的條件,也不滿足“簡棄”的條件?
——>需要對直線段按交點進行分段,分段後判斷直線是“簡取”還是“簡棄”。
裁剪一條線段時,先求出端點p1和p2的編碼code1和code2,然後進行二進制“或”運算和“與”運算。
【若這兩個條件均不成立,則需要求出直線段與窗口邊界的交點在交點處把線段一分為二。】
如裁剪如下圖所示的直線段P1P2:
首先對P1P2進行編碼
令直線段與窗口左邊界的交點為P3,
則可知P1P3必在窗口外,可以簡棄之。
再令直線段與窗口下邊界的交點為P4,
光柵圖形學算法——裁剪算法
一、直線裁剪算法
1、裁剪:計算機內部存儲的圖形往往比較大,而屏幕顯示的只是圖形的一部分,因此需要確定圖形哪些部分落在顯示區之內,哪些落在顯示區之外,這個選擇的過程就稱為裁剪。
1.1點的裁剪——>此方法太費時,效率比較低,一般不可取。
對於任意一點P(x,y)若滿足下列不等式,則點P在矩形窗口內
1.2直線段的裁剪——>復雜圖形裁剪的基礎
要裁剪一條直線段,首先要判斷此直線的位置:
1)它是否完全落在裁剪窗口內?
2)它是否完全在窗口外?
3)如果不滿足以上兩個條件,則計算它與一個或多個裁剪邊界的交點。
二、Cohen-Sutherland算法(編碼裁剪算法)
首先對直線段的端點進行編碼。
基本思想:對每條直線段分三種情況處理:
1)若點p1和p2完全在裁剪窗口內——>“簡取”之(保留這條直線)
2)若點p1(x1,y1),p2(x2,y2)均在窗口外,且滿足下列四個條件之一:——>“簡棄”之(不要了)
3)如果直線段既不滿足“簡取”的條件,也不滿足“簡棄”的條件?
——>需要對直線段按交點進行分段,分段後判斷直線是“簡取”還是“簡棄”。
裁剪一條線段時,先求出端點p1和p2的編碼code1和code2,然後進行二進制“或”運算和“與”運算。
【若這兩個條件均不成立,則需要求出直線段與窗口邊界的交點在交點處把線段一分為二。】
如裁剪如下圖所示的直線段P1P2:
首先對P1P2進行編碼
令直線段與窗口左邊界的交點為P3,
則可知P1P3必在窗口外,可以簡棄之。
再令直線段與窗口下邊界的交點為P4,
剩下的直線段(P3P4)再進行進一步判斷,code1|code2=0,全在窗口中,簡取之
【點P在窗口邊界也屬於在窗口內】
【存在的問題】
如圖中線段全部在窗口外部,但是對兩段端點進行或/與運算時,需要再次取交點進行運算,最壞情況下,被裁剪線段與窗口4條邊計算交點,然後所得的裁剪結果卻可能是全部舍棄。
【小結】Cohen-Sutherland算法比較適合兩種情況:
1、大部分線段完全可見;
2、大部分線段完全不可見。
裁剪算法——Cohen-Sutherland算法