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 時候的演...