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...