Bresenham高效畫線演算法

2021-05-22 19:19:06 字數 1766 閱讀 7402

bresenham高效畫線演算法

畫線的演算法不少,但要作到高速、簡單並不容易。斜率相乘法是最簡單的方法之一,但計算每個點均要花費不少時間用於乘、除法運算;下面介紹的是bresenham's高效畫線演算法,對每個點的座標計算只要加、減法就能完成。

簡化演算法用偽pascal語言描述如下:

procedure drawline(x1, y1, x2, y2: integer);

varx, y, deltax, deltay, halfx, errorterm, i: integer;

begin

deltax := x2 - x1;

deltay := y2 - y1;

halfx := (x2 - x1) shr 1;

errorterm := 0;

x := x1;

y := y1;

for i:=0 to deltax do

begin

plot(x, y);

inc(x);

errorterm := errorterm + deltay;

if errorterm>halfx then

begin

errorterm := errorterm - deltax;

inc(y);

end;

end;

end;

為方便閱讀,上述程式作了簡化。實際程式應略作修正,以分別處理deltax與deltay比較大小, 必要時交換起始、結束點等。

修正後的的偽pascal演算法如下:

procedure drawline(x1, y1, x2, y2: integer);

varx, y, deltax, deltay, halfcount, errorterm, i, flag: integer;

begin

deltax := x2 - x1;

deltay := y2 - y1;

if abs(deltay)halfcount then

begin

errorterm := errorterm - deltax;

y := y + flag;

end;

end;

endelse

begin

if deltay<0 then

begin

i := x1;    x1 := x2;       x2 := i;

i := y1;    y1 := y2;       y2 := i;

deltax := x2 - x1;

deltay := y2 - y1;

end;

if deltax<0 then flag := -1

else flag := 1;

deltax := abs(deltax);

halfcount := deltay shr 1;

errorterm := 0;

x := x1;

y := y1;

for i:=0 to deltay do

begin

plot(x, y);

inc(y);

errorterm := errorterm + deltax;

if errorterm>halfcount then

begin

errorterm := errorterm - deltay;

x := x + flag;

end;

end;

end;

end;

Bresenham畫線演算法

bresenham畫線演算法 bresenham演算法是計算機圖形學領域使用最廣泛的直線掃瞄轉換演算法。仍然假定直線斜率在0 1 之間,該方法類似於中點法,由乙個誤差項符號決定下乙個象素點。演算法原理如下 過各行各列象素中心構造一組虛擬網格線。按直線從起點到終點的順序計算直線與各垂直網格線的交點,然...

Bresenham 畫線演算法

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

Bresenham 畫線演算法

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