Liang Barsky直線裁剪演算法的實現

2021-06-02 09:58:23 字數 1200 閱讀 9136

liang-barsky直線裁剪演算法簡介

liang-barsky演算法由浙江大學的梁友棟與加州大學伯克利分校的briana. barsky共同提出。該演算法採用直線引數方程和不等式,以確定裁剪框與直線間的交點。

1.       在執行交點計算之前,liang-barsky演算法會首先對線段進行足夠的檢測以保證其有必要進行裁剪。對直線上點的位置進行定義;其中(x0, y0)為直線始點,(x1, y1)為直線末點:

x = x0 + u(x1 - x0) = x0 + u*dx;

y = y0 + u(y1 - y0) = y0 + u*dy;

定義裁剪框:

xmin, xmax, ymin, ymax

點在裁剪框內的條件:

u*pk <= qk, k = 1, 2, 3, 4

其中:p1 = -dx, q1 = x0 - xmin (left)

p2 = dx, q2 = xmax - x0 (right)

p3 = -dy, q3 = y0 - ymin (bottom)

p4 = dy, q4 = ymax - y0 (top)

2.       交點求解過程:

2.1.    判斷某條線段是否平行,既兩個點的x或y值是否相等:

·             若相等,則計算該x或y值是否在視窗的對應範圍內:

o       若在該視窗範圍內,則計算兩個交點並返回其值;

o       若不在該裁剪視窗範圍內,則繼續執行;

·             若不等,直接繼續執行;

2.2.    對於的情況,交點座標所對應的u值應表示為u = qk / pk;

2.3.    當pk < 0時,對於該邊緣,此線段由裁剪區外至裁剪區里方向伸展;否則由里至外伸展

2.4.    分別求解裁剪所需的兩個交點u1,u2:

·             分別計算(x0, y0)點相對於四條邊的u值:

o       若對於某條邊,(x0, y0)點之pk < 0,則u1取值為max(0, qk / pk);

o       若對於某條邊,(x0, y0)點之pk > 0,則u2取值為min(1, qk / pk);

o       對於以上的k值,

·             若u1 > u2,則說明該線段在裁剪區域之外,停止裁剪;否則由引數方程得出由u1至u2的裁剪後直線。

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 在凸多邊形內的充要條件是,...

直線裁剪演算法

此演算法 就是cyrus beck裁剪演算法 1.判斷dx,dy是否為零作相應的簡單處理,並返回 2.下面通過例子說明第2步的原理,現在先給出原理 如果p1p2與裁剪區域有交點,那麼p1p2與裁剪區域存在交集,使得交集中的任一元素t同時滿足下列不等式 xmin x1 dx t xmax 1 ymin...

(12)裁剪之直線段裁剪

圖形裁剪的定義 確定圖形在指定區域 即裁剪視窗 內的部分並保留,以及在區域外的部分並裁掉的過程稱為圖形裁剪。假定 裁剪視窗為矩形視窗,左下點座標為 xl,yb 右上點座標為 xr,yt 定義 直線段裁剪就是保留給定線段在視窗內的部分。直線段與視窗的位置關係有以下幾種情況 直線段兩個端點在視窗內 線段...