Bresenham畫線演算法

2021-05-22 02:45:20 字數 1309 閱讀 1232

bresenham畫線演算法

bresenham演算法是計算機圖形學領域使用最廣泛的直線掃瞄轉換演算法。仍然假定直線斜率在0~1

之間,該方法類似於中點法,由乙個誤差項符號決定下乙個象素點。

演算法原理如下:過各行各列象素中心構造一組虛擬網格線。按直線從起點到終點的順序計算直線與各垂直網格線的交點,然後確定該列象素中與此交點最近的象素。該演算法的巧妙之處在於採用增量計算,使得對於每一列,只要檢查乙個誤差項的符號,就可以確定該列的所求象素。

如圖2.1.4所示,設直線方程為

yi+1

=yi+k

(xi+

1-xi

)+k。假設

行座標象素已經確定為

xi,其列座標為

yi。那麼下乙個象素的行座標為

xi+1,而列座標要麼為

yi,要麼遞增1為

yi+1。是否增1取決於誤差項

d的值。誤差項

d的初值d0

=0,x座標每增加1,

d的值相應遞增直線的斜率值k,即

d=d+

k。一旦

d≥1,就把它減去1,這樣保證

d在0、1之間。當

d≥0.5時,直線與垂線x=

xi+1交點最接近於當前象素(xi,

yi)的右上方象素(xi

+1,yi

+1);而當

d<0.5時,更接近於右方象素(

xi+1,

yi)。為方便計算,令e=

d-0.5,

e的初值為-0.5,增量為k。當

e≥0時,取當前象素(xi,

yi)的右上方象素(

xi+1,

yi+1);而當

e<0時,取(xi,

yi)右方象素(

xi+1,

yi)。

圖2.1.4 bresenham演算法所用誤差項的幾何含義

void bresenhamline (int x0,int y0,int x1, int y1,int color)}}

0 0 -0.5

1 0 -0.1

2 1 -0.7

3 1 -0.3

4 2 -0.9                    圖2.1.5 bresenham演算法

5 2 -0.5

上述bresenham演算法在計算直線斜率與誤差項時用到小數與除法。可以改用整數以避免除法。由於演算法中只用到誤差項的符號,因此可作如下替換:2*

e*dx。

void interbresenhamline (int x0,int y0,int x1, int y1,int color)}

Bresenham 畫線演算法

bresenham 畫線演算法是由 bresenham 提出的一種精確而有效的光柵線生成演算法,該演算法僅僅使用了 整數的增量來實現的。bresenham 演算法將對整形引數的符號檢測,整形引數的值比於實際險段之間的偏量。bresenham 演算法內容 對於直線方程 y kx b a 0 斜率 1 ...

Bresenham 畫線演算法

bresenham 畫線演算法是由bresenham提出的一種精確而有效的光柵線生成演算法,該演算法僅僅使用了 整數的增量來實現的。bresenham演算法將對整形引數的符號檢測,整形引數的值比於實際險段之間的偏量。bresenham演算法內容 對於直線方程 y kx b a,0 斜率 1 時候的演...

Bresenham 畫線演算法

畫線演算法是由 bresenham 提出的一種精確而有效的光柵線生成演算法,該演算法僅僅使用了 整數的增量來實現的。bresenham 演算法將對整形引數的符號檢測,整形引數的值比於實際險段之間的偏量。bresenham 演算法內容 對於直線方程a,斜率時候的演算法 輸入線段的兩個端點 point1...