此演算法 就是cyrus-beck裁剪演算法
1.判斷dx,dy是否為零作相應的簡單處理,並返回
2.下面通過例子說明第2步的原理,現在先給出原理
如果p1p2與裁剪區域有交點,那麼p1p2與裁剪區域存在交集,使得交集中的任一元素t同時滿足下列不等式
xmin <= x1 + dx*t <= xmax (1)
ymin <= y1 + dy*t <= ymax (2)
其中,dx = x2 - x1, dy = y2 - y1,若(1)∩(2)= 空集 則說明t不能同時滿足方程(1),(2),
亦即p1p2不需要被裁剪
為什麼「如果p1p2與裁剪區域有交點,那麼p1p2與裁剪區域存在交集,使得交集中的任一元素t同時滿足下列不等式」?
答:根據直線引數方程p = p1 + dp*t ,p表示直線段p1p2上的任一點,因此如果p滿足不等式(1),(2)就說明p在p1p2上且在裁剪區域內。
又∵0<= t <= 1,因此可以得到新的不等式方程組
(xmin - x)/dx <= t <= (xmax - x1)/dx (3)
(ymin - y1)/dy <= t <= (ymax - y1)/dy (4)
0<=t<=1 (5)
如圖,p1(x1,y1), p2(x2,y2)
x1 = 2 x2 = 7
y1 = -2 y2 = 2
裁剪區域為:
代入不等式組得
-6/5 <= t <= 4/5
-1/2 <= t <= 3/2
0 <= t <= 1
解不等式方程組得
0 <= t <= 4/5
令t1 = 0, t2 = 4/5,則t1, t2是p1p2被裁剪後的兩個點p1',p2'對應的兩個t值
因為t1 = 0,又根據直線的引數方程p = p1 + dp*t ,得p1' = p1 + dp*0 = p1
x2' = x1 + dx*t2 = 2 + 5*4 / 5 = 6
y2' = y1 + dy*t2 = -2 + 4*4 / 5 = 1.2
則p2' = (6,1.2)
p1'(2, - 2), p2'(6,1.2)就是p1p2被裁剪區域裁剪後的兩個點
因為p1在裁剪區域內,所以p1' = p1是合理的
Liang Barsky直線段裁剪演算法
考慮凸多邊形區域r和直線段p1p2 p t p2 p1 t p1 設a是區域r的邊界上一點,n是區域邊界在a點的內法線向量 則對於線段p1p2上任一點p t n p t a 0 外側 n p t a 0 內側 n p t a 0 邊界或其延長線上 凸多邊形的性質 點p t 在凸多邊形內的充要條件是,...
opengl演算法學習 直線裁剪演算法
裁剪是從資料集合提取資訊的過程,它是計算機圖形學許多重要問題的基礎。裁剪典型的用途就是從乙個大的場景中提取所需的資訊,以顯示某一區域性場景或檢視。比如瀏覽地圖時,對感興趣的區域放大顯示,此時視窗內顯示的內容會相應減少。確定圖形的哪些部分在視窗內,哪些部分在視窗外 不可見區域 只顯示視窗內的那部分圖形...
Liang Barsky直線裁剪演算法的實現
liang barsky直線裁剪演算法簡介 liang barsky演算法由浙江大學的梁友棟與加州大學伯克利分校的briana.barsky共同提出。該演算法採用直線引數方程和不等式,以確定裁剪框與直線間的交點。1.在執行交點計算之前,liang barsky演算法會首先對線段進行足夠的檢測以保證其...