直線裁剪演算法

2021-06-12 16:05:48 字數 1475 閱讀 3615

此演算法 就是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演算法會首先對線段進行足夠的檢測以保證其...